Função de seleção de linha desativada após usar um renderizador de células
-
27-09-2019 - |
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.
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.