Pregunta

estoy haciendo algo mal Cleary. Mi conjetura sería el componente, pero aquí está el problema. Este es mi procesador de celdas:

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

}

y así es como me juego hasta la hora de mi panel:

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

El problema es que cuando he creado este procesador se convierten en las filas no seleccionable. ¿Debo usar un componente diferente para mostrar lo que necesito pantalla? Básicamente estoy mostrando un valor de 0/1 como / Sí valor n.

¿Fue útil?

Solución

Es necesario tomar el valor "isSelected" en cuenta y establecer el color de fondo de acuerdo con este aspecto:

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

que tomé de uno de mis ListCellRenderers pero yo supongo que funciona de la misma con los TableCellRenderers.

Ah, y por cierto, se puede reutilizar el campo de texto, no hay necesidad de crear un nuevo campo de texto para cada celda, por lo que podría hacer que el campo de texto de un miembro de su clase y dentro del método que acabamos de cambiar algo en su campo de texto como el contenido / el color y devolverlo. De esa manera usted no termine con un millón de instancias de TextField en una mesa grande.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top