JTable中“突出显示”特定行
问题内容:
每当单元格的内容与用户的输入匹配时,我都希望突出显示JTable中的特定行。以下代码是我到目前为止可以使用的代码:
JTable table = new JTable(model) {
public Component prepareRenderer(
TableCellRenderer renderer, int row,
int column) {
Component c = super.prepareRenderer(renderer,
row, column);
if (!isRowSelected(row) ) {
c.setBackground((hashMapcontainer
.containsKey(row)) ? Color.GREEN
: getBackground());
}
return c;
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
注意:hashMapcontainer
是hashmap
在源文件中全局作用域。
现在,此操作在某种程度上可行,但是我将其添加JTable
到JTabbedPane
内的JFrame
。JTables是在程序运行时动态创建的。但是,该prepareRenderer
方法会使所有已创建的JTables中的所有特定单元格突出显示。
如何在所有JTable中保留单元格以保留其特定的突出显示单元,而不是让所有JTable在每个JTable中具有完全相同的突出显示单元呢?
提前致谢!
问题答案:
渲染器是“橡皮图章”。基本上,这意味着它们会将先前的设置带到下一个单元格。
您需要做的是提供“默认”行为
if (!isRowSelected(row) ) {
c.setBackground((hashMapcontainer
.containsKey(row)) ? Color.GREEN
: getBackground());
} else {
// Define the default background color
// Don't forget to take into the selection state
}
虽然我个人认为prepareRenderer
在这种情况下可能是一个公平的解决方案,但您确实应该探索提供基线渲染器的可能性。这是一项很艰巨的工作,但具有可移植性(如果您更改表实现)的优点,并且允许其他人定义给定单元格的突出显示规则的机会,而您基本上已经将其覆盖并覆盖,
恕我直言。