Pergunta

Estou claro fazendo algo errado. Meu palpite seria o componente, mas aqui está o problema. Este é o meu renderizador de celular:

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

}

E é assim que eu configuro a coisa no meu painel:

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

O problema é que, quando configurei esse renderizador, as linhas se tornam inocentes. Devo usar um componente diferente para exibir o que preciso exibir? Basicamente, estou exibindo um valor 0/1 como um valor não/sim.

Foi útil?

Solução

Você precisa levar em consideração o valor "ISSELECT" e configurar a cor de fundo de acordo com esta:

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

Eu peguei isso de um dos meus listões de listas, mas presumo que funcione da mesma forma com os TableCellrenders.

Ah e btw, você pode reutilizar o campo de texto, não há necessidade de criar um novo campo de texto para cada célula, para que você possa fazer do campo de texto um membro da sua classe e dentro do método, basta alterar algo em seu campo de texto como conteúdo/ colorir e devolvê -lo. Dessa forma, você não acaba com um milhão de instâncias de campo de texto em uma mesa grande.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top