rowData
передается JTable в конструкторе.Затем в updateTable
вы просто обновляете поле rowData
в вашем TableClass
.Поэтому ни JTable
, ни TableModel
ничего не знают о ваших изменениях.Вам необходимо обновить модель таблицы в updateTable
.
Другими словами, когда вы обновляете rowData
в updateTable
, вы не обновляете тот же объект rowData
, который вы передали в JTable в своем конструкторе.
Функциональность приведенного ниже класса такая же, как и у вашего класса.Это проясняет, почему то, что вы делаете, не имеет никакого эффекта?Видите ли, rowData никоим образом не является общим для TableClass и JTable.И это не должно быть - вы должны обновлять TableModel.Вы можете реализовать свою собственную TableModel и обновить этот объект своими изменениями.
class tableClass
{
public Vector columnNames = null;
private JTable jTable;
DefaultTableModel model;
public tableClass(JPanel jPanel, Vector rowDataInput, Vector columnNamesInput)
{
Vector rowData = rowDataInput;
columnNames = columnNamesInput;
jTable = new JTable(rowData, columnNames);
jTable.setFillsViewportHeight(true);
JScrollPane jScrollPane = new JScrollPane(jTable);
jScrollPane.setPreferredSize(new Dimension(300, 100));
jPanel.add(jScrollPane,BorderLayout.CENTER);
}
public void updateTable(Vector rowDataInput)
{
Vector rowData = rowDataInput;
model =(DefaultTableModel)jTable.getModel();
model.fireTableDataChanged();
}
}
Вы можете изменить свой код следующим образом, чтобы доказать, что изменения работают. Обратите внимание , что я не , выступающий за этот подход - вы должны действительно реализовать свою собственную TableModel, а просто показать вам, как изменить саму базовую модель и, следовательно, увидеть, как изменения происходят вJTable на экране.
РЕДАКТИРОВАТЬ Поскольку этот ответ был принят, и после комментариев @kleopatra и использования ответа @ Адама (+1) я обновил приведенный ниже код, чтобы показать, какобновить весь вектор данных или векторов в updateTable
.Я бы по-прежнему не делал этого в рабочем коде, но, по крайней мере, это функционально правильно и ближе к вопросу ОП.
class MyTable {
private Vector columnNames = null;
private JTable jTable;
public tableClass(JPanel jPanel, Vector rowDataInput, Vector columnNamesInput) {
// ...
jTable = new JTable(rowData, columnNames);
// ...
}
public void updateTable(Vector rowDataInput) {
model =(DefaultTableModel)jTable.getModel();
// Now actually update the model with your new data:
model.setDataVector(rowDataInput, columnNames);
}
}
Как я уже сказал, это не очень хороший способ сделать это,но я просто пытаюсь показать вам, почему то, что вы делаете, не работает.:)