Java j可变单元格颜色';它来自给定的数组列表

Java j可变单元格颜色';它来自给定的数组列表,java,swing,colors,jtable,tablecellrenderer,Java,Swing,Colors,Jtable,Tablecellrenderer,我有一个类,它定义了一个错误的基本参数 public class Error { public String desc; public int rowNumber; public int colNumber; public int fixNumber; public Error(String desc,int row, int col, int fix){ this.desc = desc; rowNumber = row++; colNumber = col++;

我有一个类,它定义了一个错误的基本参数

public class Error {

public String desc;
public int rowNumber;
public int colNumber;
public int fixNumber;

public Error(String desc,int row, int col, int fix){
    this.desc = desc;
    rowNumber = row++;
    colNumber = col++;
    fixNumber = fix;
}
...
我的gui类

public class Gui extends JFrame {

AbstractTableModel model;
JTable table; 

public void start(AbstractTableModel model) { 
    this.model = model;
    table=new JTable(model){
        @Override 
        public boolean isCellEditable(int arg0, int arg1) { 
            return false; 
        }

    }; 

    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);


    TableColumn column = null;
    for (int i = 0; i < model.getColumnCount(); i++) {
            column = table.getColumnModel().getColumn(i);
            column.setPreferredWidth(120);  
            column.setMaxWidth(300);
            column.setMinWidth(50);
            column.setCellRenderer(new customCellRender());
        }



        JScrollPane pane = new JScrollPane(table);  
        pane.setPreferredSize(new Dimension(900,900));
        add(pane); 
        setLayout(new FlowLayout());
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
        pack();
        setVisible(true); 
}

然后,我有一个存储错误类实例的列表。我搞不懂的是如何仅根据错误(rowNumber、colNumber)更改表中单元格的颜色。考虑到错误在列表结构中,因此我必须迭代并以某种方式将每个错误列和行传递给渲染器。这可能吗?

您的代码为所有单元格着色,因为组件是重复使用的,而不是每次都重新创建。只需添加一个

if (error) {
    c.setBackground(errorBackground);
} else {
    c.setBackground(table.getBackground);
}
有几点需要说明:

  • 不要每次都创建新颜色。它很贵,而且你用的是同一个
  • 使用错误集可以使
    包含的
    快速,否则,如果出现大量错误,渲染可能会变得非常缓慢

  • 这一点很好,但我仍然有一个问题,那就是如何呈现
    Listerrors
    中的表格单元格。因此,我迭代每个值,并将行号和列号传递给?@user1477957。如果您坚持使用
    错误列表,这是您能得到的最好结果。(也许你可以使用空间索引使其成为对数而不是线性的)。但是,如果您有一个Point对象,它有一行和一列以及一个hash&equals函数,那么您可以使用一个具有常量访问权限的HashSet(如回答的第2点所述)来更快地获得更好的帮助,发布一个(最小完整且可验证的示例)。
    
    if (error) {
        c.setBackground(errorBackground);
    } else {
        c.setBackground(table.getBackground);
    }