Функция выбора строки отключена после использования средства визуализации ячеек - PullRequest
2 голосов
/ 23 ноября 2010

Я ясно делаю что-то не так.Я думаю, что компонент будет, но вот проблема.Это мой рендерер ячеек:

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 как значение Нет / Да.

1 Ответ

4 голосов
/ 23 ноября 2010

Вам необходимо принять во внимание значение isSelected и соответственно настроить цвет фона следующим образом:

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

Я взял это у одного из моих ListCellRenderers, но я предполагаю, что он работает так же сTableCellRenderers.

Да, и кстати, вы можете повторно использовать текстовое поле, нет необходимости создавать новое текстовое поле для каждой ячейки, чтобы вы могли сделать текстовое поле членом вашего класса, а внутри метода просто изменитьчто-то в вашем текстовом поле, например, содержимое / цвет, и верните его.Таким образом, вы не получите миллион экземпляров текстового поля на большой таблице.

...