Frage

Ich bin etwas falsch cleary tun. Meine Vermutung wäre die Komponente, aber hier ist das Problem. Das ist mein CellRenderers:

public class WildcardCellRenderer implements TableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {

        JTextField c = new JTextField();
        c.setBorder(javax.swing.BorderFactory.createEmptyBorder());

        if(vColIndex == 2){
            if((Integer)value == 0) c.setText("No") ;
            else c.setText("Si");
        } else c.setText(value.toString());

        return c;
    }

}

und das ist, wie ich das Ding in meinem Panel einrichten:

    this.table.setDefaultRenderer(Object.class, new WildcardCellRenderer() );

Das Problem ist, dass, wenn ich diese Renderer einrichten die Zeilen unselectable werden. Soll ich eine andere Komponente verwenden, um anzuzeigen, was ich Anzeige benötigen? Im Grunde bin ich Anzeigen eines 0/1 Wert als Nein / Ja Wert.

War es hilfreich?

Lösung

Sie müssen die „isSelected“ Wert Rechnung tragen und die Hintergrundfarbe entsprechend wie folgt aufgebaut:

 if (isSelected) {
        c.setBackground(table.getSelectionBackground());
        c.setForeground(table.getSelectionForeground());
    }
    else {
        c.setBackground(table.getBackground());
        c.setForeground(table.getForeground());
    }

Ich habe dies von einem meiner ListCellRenderers, aber ich nehme an, es funktioniert genauso mit den TableCellRenderers.

Oh und BTW, können Sie das Textfeld wieder verwenden, gibt es keine Notwendigkeit, ein neues Textfeld für jede Zelle zu erstellen, so dass Sie das Textfeld ein Mitglied Ihrer Klasse machen könnten und innerhalb der Methode nur etwas ändern in Ihrem Textfeld wie Inhalt / Farbe und gibt es zurück. Auf diese Weise können Sie nicht mit einer Million Textfeld-Instanzen auf einem großen Tisch landen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top