我爲我的JTable使用AbstractTableModel。更改特定JTable單元格中的數據
public class MyTableModel extends AbstractTableModel {
private List<String> columnNames = new ArrayList<String>();
private List<List> data = new ArrayList();
MyTableModel() {
columnNames.add("Action");
columnNames.add("Count");
columnNames.add("Total");
columnNames.add("X");
columnNames.add("Y");
columnNames.add("Quarter");
columnNames.add("Answer");
columnNames.add("T (ms)");
}
public void addRow(List rowData) {
data.add(rowData);
fireTableRowsInserted(data.size() - 1, data.size() - 1);
}
public void insertRow(int index, List rowData) {
data.add(0, rowData);
fireTableRowsInserted(data.size() - 1, data.size() - 1);
}
public int getColumnCount() {
return columnNames.size();
}
public int getRowCount() {
return data.size();
}
public String getColumnName(int col) {
try {
return columnNames.get(col);
} catch (Exception e) {
return null;
}
}
public Object getValueAt(int row, int col) {
return data.get(row).get(col);
}
public boolean isCellEditable(int row, int col) {
return false;
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
我通過在一些不重要的類中執行某些代碼來添加新行(通過成功),同時應用程序正在運行。它看起來像這樣。
MyClass.MyTableModel.insertRow(0, (Arrays.asList(String.valueOf(valueOne), String.valueOf(valueTwo), String.valueOf(valueThree),
String.valueOf(valueFour), String.valueOf(valueFive), String.valueOf(valueSix), String.valueOf(valueSeven),
String.valueOf(valueEight), String.valueOf(valueNine))));
MyClass.myTable.setModel(MyClass.MyTableModel);
MyClass.myTable.repaint();
但我不能在這些添加的行中更改特定單元格中的數據。我試圖覆蓋setValueAt()方法,但沒有成功。此外,我想簡單地調用方法setValueAt()爲MyClass.MyTableModel例如:
MyClass.MyTableModel.setValueAt("valueChange", 0, 6);
MyClass.myTable.setModel(MyTableModel);
MyClass.myTable.repaint();
這也不起作用。我試着爲我的模型調用fireTableCellUpdated()(我知道這是錯誤的做法),但它也嘗試失敗。你有什麼想法?
爲了更好的幫助更快,發佈[SSCCE](http://sscce.org/)。 –
請使用正確的大寫字母來提高可讀性;變量應該以小寫字母開頭,與「MyClass」及其字段「MyClass.MyTable」不同。 「不起作用」不是一個非常有用的錯誤描述。 –
@AndrewThompson,我會記住,謝謝你,先生。他先生,我怎麼能更好地描述數據更新不起作用的情況,我不知道爲什麼?如果我知道爲什麼不會有這個問題。 – bluevoxel