Отметьте дубликаты в JTable

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

введите описание изображения здесь

Итак, с помощью этого сообщения проверьте повторяющиеся данные в jtable, прежде чем продолжить

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

      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, и эта таблица всегда меняет каждую форму - также изменяется количество столбцов.

Если потребуется что-то еще, я бы отредактировал свой пост.

Спасибо.


person Dimitra Micha    schedule 07.03.2013    source источник
comment
не знаю, мэбай, вот ответы получше, возможно , но для лучшей помощи скорее опубликуйте SSCCE, короткий, исполняемый, компилируемый массив жесткого кода для AbstractTableModel как локальную переменную   -  person mKorbel    schedule 07.03.2013
comment
как изображение связано с вашим вопросом? повторяющиеся столбцы против строк, передний план против фона? Если это не так, пожалуйста, удалите. И лучше всего показать SSCCE, который демонстрирует проблему. И остерегайтесь пресловутой цветовой памяти DefaultTableCellRenderer: установите цвета (выделение или ноль) перед вызовом супер.   -  person kleopatra    schedule 07.03.2013
comment
@kleopatra изображение используется для демонстрации не того, как я помечаю дубликаты, а того, как выглядит мой текущий JTable и что я хочу проверить.   -  person Dimitra Micha    schedule 07.03.2013
comment
из изображения я предполагаю, что вы хотите пометить все ячейки в столбце, когда все значения совпадают с соответствующими ячейками в предыдущем столбце .. что не то, что делает ваша логика :-)   -  person kleopatra    schedule 07.03.2013
comment
я хочу проверить столбец b и посмотреть, имеют ли столбцы c и d одинаковые значения.   -  person Dimitra Micha    schedule 07.03.2013


Ответы (1)


Я бы заменил 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);
    }
}
person StanislavL    schedule 07.03.2013
comment
Я думаю, это правильно, если в JTable только два столбца, верно? И даже если в нем всего два столбца, он отмечает 3 ячейки, продолжающие до следующей строки. - person Dimitra Micha; 07.03.2013