我为我的JTable使用AbstractTableModel。
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()方法,但没有成功。另外,我试图简单地为MyClass.MyTableModel调用方法setValueAt(),例如:
MyClass.MyTableModel.setValueAt("valueChange", 0, 6);
MyClass.myTable.setModel(MyTableModel);
MyClass.myTable.repaint();
这也行不通。我试图为我的模型调用fireTableCellUpdated()(我知道这是错误的做法),但它也尝试失败了。你有什么想法吗?
答案 0 :(得分:2)
您不会覆盖setValueAt
方法。默认情况下,此方法不执行任何操作。
例如......
public void setValueAt(Object value, int row, int column) {
List rowValues = date.get(row);
rowValues.set(column, value);
fireTableCellUpdated(row, col);
}
这假设所有列都是可编辑的。通常,我会检查传入的值,以确保它是指定列的正确类型,并应用可能需要进行验证的内容,但我会将其留给您
您可能还想看一下How to use tables作为一些例子