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);
}