Java-着色匹配两个不同JTable中的单元

时间:2017-03-08 20:42:03

标签: java jtable

我正在编写一个实用程序来比较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);
                    }
                }
            }

0 个答案:

没有答案