gpt4 book ai didi

java - JTable TableCellRenderer 着色不正确

转载 作者:行者123 更新时间:2023-11-30 02:08:31 26 4
gpt4 key购买 nike

我使用自定义的 DefaultTableCellRenderer 创建了一个简单的 JTable。它本身工作正常(最后一列着色)。但是,一旦我选择一行或过滤/取消过滤它,该行就会被着色,即使它根本不应该被着色。

我的渲染器:

public class StatusCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int col) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
table.convertRowIndexToModel(row), col);
DataTableModel model = (DataTableModel) table.getModel();
String data = model.getValueAt(table.convertRowIndexToModel(row), col).toString();
if (col == 3 && data.equalsIgnoreCase("successful") && !data.isEmpty()) {
c.setBackground(Color.GREEN);
}
if (col == 3 && !data.equalsIgnoreCase("successful") && !data.isEmpty()) {
c.setBackground(new Color(255, 51, 51));
}
return c;
}
}

它最初的外观(以及它应该始终的外观):

enter image description here

选择 2 行(顶部和底部行)后:

enter image description here

正如您所看到的,有几行是绿色的,根本不应该着色。更令人不安的是,我只选择了绿色 block 的顶行和底行,这意味着它也会自动为中间的行着色。

如何停止这种行为并仅对第一张图片中所示的行进行着色?

<小时/>

接受的答案非常帮助我克服了这些问题,这是最终的代码:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int col) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
table.convertRowIndexToModel(row), table.convertColumnIndexToModel(col));
DataTableModel model = (DataTableModel) table.getModel();
String data = model.getValueAt(table.convertRowIndexToModel(row), table.convertColumnIndexToModel(col))
.toString();
if (!isSelected) {
if (col == 3 && data.equalsIgnoreCase("successful") && !data.isEmpty()) {
c.setBackground(Color.GREEN);
} else if (col == 3 && !data.equalsIgnoreCase("successful") && !data.isEmpty()) {
c.setBackground(new Color(255, 51, 51));
} else {
c.setBackground(Color.WHITE);
}
} else {
c.setBackground(c.getBackground());
}
return c;
}

如果单元格被选中,它的颜色为蓝色,如果没有,则根据值,它的颜色为白色、绿色或红色

最佳答案

由于渲染器组件将被重用,请考虑在没有条件匹配时设置默认颜色:

    if (col == 3 && data.equalsIgnoreCase("successful") && !data.isEmpty()) {
c.setBackground(Color.GREEN);
}
else if (col == 3 && !data.equalsIgnoreCase("successful") && !data.isEmpty()) {
c.setBackground(new Color(255, 51, 51));
}
else {
c.setBackground(Color.GRAY.brighter());
}

关于java - JTable TableCellRenderer 着色不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50756543/

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