gpt4 book ai didi

java - 根据前一行 JXTreeTable 中的值绘制单元格某些颜色

转载 作者:行者123 更新时间:2023-11-30 09:50:30 24 4
gpt4 key购买 nike

我有一个带有自定义单元格渲染器的 JXTreeTable。当一行中的字段与上一行中的字段不同时,我试图让一行的背景颜色发生变化。例如,该行包含“1”作为 ID。如果前一行也包含“1”,我希望这一行被涂成相同的颜色。如果前一个是“2”,我希望这一行被涂成另一种颜色。目的是对具有相同 ID 的行进行分组。

我最初是存储以前绘制的颜色并使用它(连同值)来确定绘制当前行的颜色。然而,这仅在从上到下完全绘制表格时才有效。我目前正在获取前几行的背景颜色并使用它来确定,但是如果选择了该行或以其他方式不同,这会弄乱颜色。有更好的方法吗?

public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
Object node = this.getPathForRow(row).getLastPathComponent();

if(node instanceof Record && !isCellSelected(row,column)) {
Object prevNode = null;
Component prevC = null;
if(row > 1) {
prevC = super.prepareRenderer(renderer, row-1, column);
prevNode = this.getPathForRow(row-1).getLastPathComponent();
}
if(row != prevRow) { //paint rows the same colour
if(getTreeTableModel().getValueAt(node,17) != null) {
if (prevNode != null) {
if(getTreeTableModel().getValueAt(prevNode, 17) == getTreeTableModel().getValueAt(node, 17)) {
c.setBackground(prevC.getBackground()); //if ID is same as previous ID, paint same colour
prevColor = prevC.getBackground();
}else if(prevC.getBackground().equals(Color.WHITE)) {;
c.setBackground(new Color(240,255,255)); //if previous row was white, paint blue
prevColor = new Color(240,255,255);
}else if(prevC.getBackground().equals(new Color(240,255,255))) {
c.setBackground(Color.WHITE); //if previous row blue, paint white
prevColor = Color.WHITE;
}
} else {
c.setBackground(Color.WHITE); //previous node is null
prevColor = Color.WHITE;
}
}
} else {
c.setBackground(prevColor);
}
}
prevRow = row;
return c;
}

最佳答案

如果您的数据更改不多,您可以预先确定每个 ID 的颜色,并在每次设置背景之前查找它们。

关于java - 根据前一行 JXTreeTable 中的值绘制单元格某些颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5154652/

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