Domanda

Sto Cleary facendo qualcosa di sbagliato. La mia ipotesi è la componente, ma qui è il problema. Questo è il mio renderer di celle:

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;
    }

}

ed è così che ho creato la cosa nel mio pannello:

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

Il problema è che quando ho creato questo renderer le righe diventano selezionabile. Dovrei usare un diverso componente per visualizzare quello che ho bisogno di visualizzazione? Fondamentalmente sto visualizzando un valore di 0/1 come / Sì indicare il valore No.

È stato utile?

Soluzione

È necessario prendere il valore "isSelected" in considerazione e impostare il colore di sfondo di conseguenza in questo modo:

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

Ho preso questa da uno dei miei ListCellRenderers ma suppongo che funziona lo stesso con gli TableCellRenderers.

Oh, e BTW, è possibile riutilizzare il campo di testo, non c'è bisogno di creare un nuovo campo di testo per ogni cella, così si potrebbe rendere il campo di testo un membro della vostra classe e all'interno del metodo appena cambiare qualcosa nel tuo campo di testo come contenuti / colore e restituirlo. In questo modo non si finisce con un milione di casi TextField su un grande tavolo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top