所以我有以下类定义错误的基本参数
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);
}
我试图制作一个cellRenderer,但目前它没有预期的效果。因为它为所有细胞着色。
@SuppressWarnings("serial")
public class customCellRender extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
Component c = null;
c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(new java.awt.Color(255, 72, 72));
return c;
}
然后我有一个存储错误类实例的List。我不知道如何只根据Error(rowNumber,colNumber)更改表中单元格的颜色。考虑到错误是在列表结构中,所以我必须迭代并以某种方式将每个错误列和行传递给渲染器。这可能吗?
答案 0 :(得分:1)
您的代码为所有单元格着色,因为该组件已重复使用,而不是每次都重新创建。只需添加一个
if (error) {
c.setBackground(errorBackground);
} else {
c.setBackground(table.getBackground);
}
要说几点:
contains
,否则你的渲染可能会变得非常慢而且有很多。