gpt4 book ai didi

java - 比较两个或多个 JTables 和 'Highlight' 差异

转载 作者:行者123 更新时间:2023-12-04 21:29:26 24 4
gpt4 key购买 nike

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

我读过有关覆盖 prepareRenderer 或 getTableCellRendererComponent 的内容。条件渲染逻辑然后在 Overridden 方法中。

DefaultTableCellRenderer getTableCellRendererComponent never gets called http://tips4java.wordpress.com/2010/01/24/table-row-rendering/ http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer

但是据我所知和我的理解(如果我错了请纠正我),这两个选项都不允许您在这个覆盖的方法中同时比较两个不同的 JTable。 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)

现在我有一个非常丑陋的技巧,它使用多个表格单元格选择和一个 getTableCellRendererComponent 方法来测试 isSelected boolean 值并相应地更改背景。现在这已经足够好了(因为我是唯一一个使用这个程序的人)但是必须有更好的方法能够根据不同表的条件或值同时比较和更改一个表的呈现。

或者我的问题处理有误吗?

提前感谢阅读/回复

最佳答案

I've read about overriding prepareRenderer or getTableCellRendererComponent. The conditional rendering logic is then within the Overridden method. But from what I can tell and what I understand (Please correct me if I'm wrong) neither option allows you the ability to compare two different JTables at the same time within this overridden method.

为什么这么说,这个说法是错误的,你有什么数据来支持。

prepareRenderer extends JTable

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

so it's overridden method only has access to that particular instance of JTable and getTableCellRendererComponent is set through the setCellRenderer of a particular column from the columnModel of a particular JTable.

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

关于java - 比较两个或多个 JTables 和 'Highlight' 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12504057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com