以下是我的代码片段:在JTable的prepareRenderer方法中编辑单元格数据是否可行?
公共GUI(){ ...
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中的单元格数据不可取?