gpt4 book ai didi

java - JTable CustomRenderer 问题

转载 作者:行者123 更新时间:2023-11-29 03:40:00 25 4
gpt4 key购买 nike

我创建了一个 Jtable。这个表由两列名称和时间戳组成。如果名称为“jane”,我想将行的颜色设为黄色。以下是该代码:-

    class CustomRenderer extends DefaultTableCellRenderer {

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
String name = table.getModel().getValueAt(row, 0).toString();

if (name.trim().equals("jane")) {
c.setBackground(Color.YELLOW);
}
return c;
}
}

但是,不是将特定名称的行颜色更改为黄色,而是更改每一行的颜色。我将表的数据设置如下

tableModelName = (DefaultTableModel)jTableName.getModel();

jTableName.setDefaultRenderer(Object.class,new CustomRenderer());

for(int i=0; i<records.size(); i++)
{
tableModelName.addRow(records.get(i));

}

我做错了什么?

最佳答案

如果名称不是“jane”,则需要一个 else 子句将背景颜色设置为黄色以外的颜色。单个渲染器实例用于所有渲染,因此一旦您在该实例上将颜色设置为黄色,它就会保持黄色。

查看 JTable 源代码以了解内置渲染器的工作原理:

    if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
}
else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}

为了更简单地执行此操作,您可以尝试子类化 JTable 并覆盖 prepareRenderer .这对于像这样影响整行的更改很方便,因此您可以为单个单元格使用自定义渲染器,并在 prepareRenderer 方法中调整一行的所有渲染器。

关于java - JTable CustomRenderer 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13631535/

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