Я использую AbstractTableModel для моего JTable.Изменение данных в определенной ячейке 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