我正在编写一个实用程序来比较SQL数据库中的元数据字段。我能够将所有数据都集成到JTable中。我现在尝试着色每个特定的单元格,具体取决于它们是否匹配另一个JTable的单元格。根据我的理解,我需要编写一个CellRenderer(Change the color of specific rows in my JTable)。我曾想过做类似下面的事情来比较这两个值是最好的解决方案
for(int i=0;i<col2;i++){
for(int j=0;j<row2;j++){
if(table1.getValueAt(i,j).equals(table2.getValueAt(i,j))){
table1.setSelectionBackground(Color.GREEN);
table2.setSelectionBackground(Color.GREEN);
}else if(!(table1.getValueAt(i, j).equals(table2.getValueAt(i, j)))){
table1.setSelectionBackground(Color.RED);
table2.setSelectionBackground(Color.RED);
}
}
}
我知道setSelectionBackground不是我想要调用的方法。我很困惑如何编写上面帖子中列出的CellRenderer,以根据内容是否相互匹配来更改单元格的背景颜色。写自定义CellRenderer是唯一的选择吗?
编辑1: 截至目前,它似乎正在为背景采用正确的颜色,但它使整个表着色而不是特定的单元格。下面是我的CellRenderer和一个for循环,我认为我应该调用setBackground方法
private class CellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected,boolean hasFocus,int row, int col){
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
this.setOpaque(true);
this.setBackground(table.getBackground());
return this;
}
int col1 = table1.getColumnCount()-1;
int row1 = table1.getRowCount()-1;
int col2 = table2.getColumnCount()-1;
int row2 = table2.getRowCount()-1;
table1.setDefaultRenderer(Object.class, new CellRenderer());
table2.setDefaultRenderer(Object.class, new CellRenderer());
if(row1>row2){
if(col1>col2){
for(int i=0;i<row2;i++){
for(int j=0;j<col2;j++){
if(table1.getValueAt(i,j).equals(table2.getValueAt(i,j))){
color = Color.GREEN;
System.out.println(color);
table1.setBackground(color);
table2.setBackground(color);
}else if(!(table1.getValueAt(i, j).equals(table2.getValueAt(i, j)))){
color = Color.RED;
System.out.println(color);
table1.setBackground(color);
table2.setBackground(color);
}
}
}