gpt4 book ai didi

java - 是否可以并且建议在 JTable 的prepareRenderer 方法中编辑单元格数据?

转载 作者:行者123 更新时间:2023-12-01 11:42:56 24 4
gpt4 key购买 nike

以下是我的代码片段:

公共(public)图形用户界面() { ...

    deadlinesAndTimeTasksTable = new JTable(deadlinesAndTimeTasksModel) {
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);

String dateTime;
String deadline = (String) deadlinesAndTimeTasksTable.getValueAt(row, 4);
if (!deadline.equals("- -")) {
dateTime = deadline;
} else {
dateTime = (String) deadlinesAndTimeTasksTable.getValueAt(row, 3);
}


DateParser dp = new DateParser(dateTime);



if (dp.getDateTimeInMilliseconds() < System.currentTimeMillis()) {
String description = (String) deadlinesAndTimeTasksTable.getValueAt(row, 1) + "!!";
setValueAt(description, row, 1)
c.setForeground(Color.RED);

} else {
c.setForeground(Color.BLUE);
}

String status = (String) deadlinesAndTimeTasksTable.getValueAt(row, 5);

if (status.equals("undone")) {

c.setBackground(new Color(0,0,0,0));
c.setFont(new Font("Arial", Font.BOLD, 12 ));
} else {
c.setBackground(new Color(0,180,150,30));


}




return c;
}

};

...
}

我想做的是附加一个字符,说“!!”如果任务时间早于当前时间,则发送到我存储任务描述的单元格之一。但是,如果我使用 setValueAt(description + "!!", row, 1) (1 是存储描述的列),会发生的情况是这个方法将不断被一遍又一遍地调用,并且 "!!"不断被附加,这样我就有了“!!!!!!……”,导致我的程序最终崩溃。

我可以知道问题的原因以及如何解决吗?

另一个问题是prepareRenderer是否只能用于更改数据格式,因此不建议在prepareRenderer中编辑单元格数据?

最佳答案

However, if I use setValueAt...

不要使用 setValueAt(...),这将更新 TableModel,正如您所注意到的。

默认渲染器是 JLabel,因此您可以执行以下操作:

JLabel label = (JLabel)c;
label.setText(...);

这只会影响当前渲染,不会影响 TableModel。

prepareRenderer only be used to change the format of the data

通常您会使用自定义渲染器来格式化数据。这是将整数值“123456789”格式化为“123,456,789”或将日期格式化为 YYYY-MM-DD 的方式。

我唯一一次使用准备渲染器方法是为了行级突出显示。请参阅 Table Row Renderering 了解更多信息。

关于java - 是否可以并且建议在 JTable 的prepareRenderer 方法中编辑单元格数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29373105/

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