以下是我的代碼片段:在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中的單元格數據不可取?