2013-03-07 3 views
0

Я создал JTable с помощью AbstractTableModel. Я хотел бы отметить (изменить цвет ячейки) в этом JTable третьем столбце, который имеет ту же запись, что и второй столбец. Например:Выделите дубликаты в JTable

enter image description here

и так, с помощью этого поста Check duplicate data in jtable before proceeding

Я пришел к этому:

 table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() 
     { 
     @Override 
     public Component getTableCellRendererComponent(JTable table, 
       Object value, boolean isSelected, boolean hasFocus, int row, 
       int column) { 
      Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, 
        row, column); 

      TreeSet<Object> set = new TreeSet<Object>(); 

      for (int i=0; i<model.getRowCount();i++){ 
       Object obj = model.getValueAt(i,1); //(row, column) 
       if(!set.add(obj)) 
       { 
        c.setBackground(new java.awt.Color(255, 72, 72)); 
       } 
       else{ 
        c.setBackground(null); 
       } 
      } 

      return c; 
     } 
     }); 

Но, несмотря на то, кажется, что он правильно проверяет каждый (из-за некоторой печати, которую я сделал), ничего не окрашено. Я хотел бы добавить, что созданный мной JTable - это JTable, который всегда меняется, то есть есть две кнопки, для PREVIOUS и NEXT, и эта таблица всегда меняет каждую форму - также меняется число столбцов.

Если что-то еще запрашивается, я бы отредактировал мое сообщение.

спасибо.

+2

[нет идеи, mabye здесь лучше ответы] (http://stackoverflow.com/questions/7132400/jtable-row-hightlighter-based- on-value-from-tablecell), возможно, но для лучшей помощи скорее опубликуйте SSCCE, short, runnable, compilable, hardcode array для AbstractTableModel как локальную переменную – mKorbel

+0

как изображение связано с вашим вопросом? дублировать столбцы против строк, переднего плана и фона? Если это не удастся удалить. И лучше показать SSCCE, который демонстрирует проблему. И будьте осторожны с [печально известной цветной памятью DefaultTableCellRenderer] (http://stackoverflow.com/a/9617446/203657): установите цвета (выделение или нуль) _before_, вызывающие супер. – kleopatra

+0

@kleopatra изображение используется, чтобы продемонстрировать не то, как я отмечаю дубликаты, но как мой текущий JTable и что я хочу проверить. –

ответ

2

Я хотел бы заменить for в визуализатора с

if (column==2) { 
    Object obj = model.getValueAt(row,column-1); //(row, column) 
    if(value.equals(obj)) { 
     c.setBackground(new java.awt.Color(255, 72, 72)); //red 
    } 
    else{ 
     c.setBackground(null); 
    } 
} 
+0

Я думаю, это правильно, если JTable имеет только два столбца вправо? И даже если он имеет только два столбца, он отмечает, что 3 ячейки продолжаются до следующей строки. –