2015-08-12 2 views
0

Я изменяю цвета фона ячеек в JTable в зависимости от определенных условий. Для этого я переопределяю Component. Цвета работают отлично, однако до того, как была выбрана ячейка, вся строка была выделена, но теперь выбирается только ячейка. Как включить выбор строк?Выбор строки JTable при переопределении Компонент

Код

JTable table = new JTable(model){ 
      @Override 
       public Component prepareRenderer(TableCellRenderer renderer, int rowIndex, 
         int columnIndex) { 
        JComponent component = (JComponent) super.prepareRenderer(renderer, rowIndex, columnIndex); 

        if(getValueAt(rowIndex, 0).toString().equalsIgnoreCase("cancel") && columnIndex == 0) { 
         component.setBackground(Color.RED); 
        } else if(getValueAt(rowIndex, 0).toString().equalsIgnoreCase("new") && columnIndex == 0){ 
         component.setBackground(Color.GREEN); 
        } 
        else if(getValueAt(rowIndex, 0).toString().equalsIgnoreCase("trade") && columnIndex == 0){ 
         component.setBackground(Color.WHITE); 
        } 
        else if(columnIndex == 0){ 
         component.setBackground(Color.ORANGE); 
        } 
        else if(columnIndex == 12) { 


         if (positions.get(getValueAt(rowIndex, 1)).toString().equals(getValueAt(rowIndex, 12)) && !getValueAt(rowIndex, 0).toString().equalsIgnoreCase("new")) { 
          component.setBackground(Color.LIGHT_GRAY); 
         } 
         else { 
          component.setBackground(Color.WHITE); 
         } 
        } 
        else { 
         component.setBackground(Color.WHITE); 
        } 

        return component; 
       } 
     }; 

То, что я пытался, но не получилось

table.setRowSelectionAllowed(true); 
+2

Рассмотрите возможность использования [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам. – MadProgrammer

+0

* «Цвета прекрасно работают, однако до того, как была выбрана ячейка, вся строка была выделена, но теперь выбрана только ячейка« * - Я думаю, что вы путаница » выбор "и" выделение строк ". Выделение строк приводит к изменению цвета фона каждой ячейки в выбранной строке, которую вы теперь переопределили. Выбор ячейки работает, изменяя границу ячейки. Вот почему мне обычно не нравится эта встроенная модификация, поскольку она уничтожает любую логику, применяемую самим средством отображения ячеек – MadProgrammer

ответ

0

Спасибо за комментарии @MadProgrammer. Мне удалось решить эту проблему, только установив цвет, если строка не была выбрана.

if (!isRowSelected(rowIndex)) { 

// set colors... 

} 
Смежные вопросы