Функция выбора строки отключена после использования визуализации ячейки
-
27-09-2019 - |
Вопрос
Я ясна что-то не так. Мое предположение будет компонентом, но вот проблема. Это моя клеточная рендер:
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;
}
}
И вот как я настроил вещь на моей панели:
this.table.setDefaultRenderer(Object.class, new WildcardCellRenderer() );
Проблема в том, что когда я настроил этот рендер, строки становятся невыжелезными. Должен ли я использовать другой компонент для отображения того, что мне нужно отобразить? В основном я показываю значение 0/1 как значение NO / YES.
Решение
Вам необходимо воспользоваться значением «Isseliced» и настроить цвет фона соответственно, например:
if (isSelected) {
c.setBackground(table.getSelectionBackground());
c.setForeground(table.getSelectionForeground());
}
else {
c.setBackground(table.getBackground());
c.setForeground(table.getForeground());
}
Я взял это из одного из моих моих ListCellRenderers, но я предполагаю, что это работает так же с скатеррементом.
О, и кстати, вы можете повторно использовать текстовое поле, нет необходимости создавать новое текстовое поле для каждой ячейки, чтобы вы могли сделать текстовое поле участником вашего класса, а внутри метода просто изменить что-то в вашем текстовом поле, как контент / Цвет и верните его. Таким образом, вы не заканчиваете миллион экземпляров текстовых полей на большом столе.