当前位置: 首页 > 知识库问答 >
问题:

比较两个或多个JTables并‘突出显示’差异

左丘峰
2023-03-14

我正在构建一个swing应用程序,它将在左边有一个项目列表,在右边有一个表。右侧显示的表数取决于左侧选择的项。我希望能够“突出显示”(setBackground)显示所有表中相同的所有行。

我读过关于重写prepareRenderer或GetTableCellRendererComponent的文章。然后,条件呈现逻辑位于重写的方法中。

DefaultTableCellRenderer GetTableCellRenderComponent从未被称为http://tips4java.wordpress.com/2010/01/24/table-row-rendering/http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer

但是,从我所知道的和我所理解的(如果我错了,请纠正我)来看,这两个选项都不允许在这个重写的方法中同时比较两个不同的JTables。prepareRenderer在扩展JTable的类中被重写,因此它在特定的表上被实例化。然后,重写的方法只影响表的特定实例

public class CustomRenderer extends JTable {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
    Component c = super.prepareRenderer(renderer, row, column);
    //  add custom rendering here
    return c;
}};

...
CustomRenderer currTable = new CustomRenderer();

getTableCellRendererComponent是通过特定JTable的columnModel中特定列的setCellRenderer设置的。

public class CustomRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        if (isSelected) {
            l.setBackground(Color.gray);
        }
        else {
            l.setBackground(Color.white);
        }
    return l;
    }};

...
CustomRenderer cr = new CustomRenderer();
currTable.getcolumnModel().getColumn(1).setCellRenderer(cr);

那么我该怎么做

if(tableOne.getValueAt(1, 1).equals(tableTwo.getValueAt(1, 1) 
//set Cell 1,1 background(Color.blue)
else
//set Cell 1,1 background(Color.red)

或者我可能把问题搞错了?

提前感谢阅读/回复

共有1个答案

阙繁
2023-03-14

我读过关于重写prepareRenderer或GetTableCellRendererComponent的文章。然后,条件呈现逻辑位于重写的方法中。但是,从我所知道的和我所理解的(如果我错了,请纠正我)来看,这两个选项都不允许在这个重写的方法中同时比较两个不同的JTables。

你为什么这么说,你有什么数据来备份这个说法,因为它是错误的。

prepareRenderer扩展JTable

方法不能扩展类,所以这没有意义。

因此,It's overridden方法只能访问JTable的特定实例,getTableCellRendererComponent是通过特定JTable的columnModel中特定列的setCellRenderer设置的。

方法可以访问程序员允许它们访问的任何内容。关键在于传递引用。

 类似资料:
  • 我试图比较两个xml文件并显示差异,如果找到的话。 目前,我正在使用XML Diff来查找差异。 也查看了xnode.deepeQuals,但它也返回是否有任何区别。但不是什么区别。 任何帮助都很感激

  • 问题内容: 我试图突出显示两个数据框之间到底发生了什么变化。 假设我有两个Python Pandas数据框: 我的目标是输出一个HTML表: 标识已更改的行(可以是int,float,boolean,string) 输出具有相同,OLD和NEW值的行(理想情况下,将其输出到HTML表中),以便使用者可以清楚地看到两个数据框之间的变化: id Name score isEnrolled Commen

  • 问题内容: 我试图突出显示两个数据框之间到底发生了什么变化。 假设我有两个Python Pandas数据框: 我的目标是输出一个HTML表: 标识已更改的行(可以是int,float,boolean,string) 输出具有相同,OLD和NEW值的行(理想情况下,将其输出到HTML表中),以便使用者可以清楚地看到两个数据框之间的变化: id Name score isEnrolled Commen

  • 问题内容: 我需要比较两个CSV文件并在第三个CSV文件中打印出差异。在我的情况下,第一个CSV是一个名为old.csv的哈希表的旧列表,第二个CSV是包含新旧哈希表的新哈希表。 这是我的代码: 第三个文件是旧文件的副本,而不是更新文件。怎么了 ?我希望你能帮助我,非常感谢! PS:我不想使用diff 问题答案: 问题在于您正在将中的每一行与中的同一行进行比较。只要一个文件中有多余的一行,您就会发

  • 我试图比较两个XML文件。我的要求是比较新旧xml文件,如果有任何差异,将其合并到新的xml文件中。 但我也想要差异。请告诉我怎样才能得到不同之处。 我已经尝试过XMLUnit,但我不想使用它。

  • 我想我可以做一个逐行和逐列的比较,但有没有更简单的方法?