在JTable中标记重复项

时间:2013-03-07 09:50:57

标签: java swing jtable tablecellrenderer

我在JTable的帮助下创建了AbstractTableModel。我想在第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,它始终会发生变化,这意味着PREVIOUSNEXT有两个按钮,此表总是如此更改每个表单 - 也更改列数。

如果还有其他要求,我会编辑我的帖子。

谢谢。

1 个答案:

答案 0 :(得分: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);
    }
}