【发布时间】:2016-02-28 20:14:46
【问题描述】:
我根本无法让我的JTable 刷新我使用方法创建的新表模型。
我已经通过tablemodel.getDataVector()方法证明我的tablemodel更新正确了。
但是,我无法让我的JTable 刷新这个新事物的视图。
我的JTable 位于一个空布局窗格中,并且位于JScrollPane 内。
关于JTable的相关代码:
private JTable patientTable = new JTable(tablemodel);
private JScrollPane patientscrollPane = new JScrollPane(patientTable);
patientTable.setModel(tablemodel);
patientTable.setFillsViewportHeight(true);
sorter = new TableRowSorter<DefaultTableModel>(tablemodel);
patientTable.setRowSorter(sorter);
patientcard.add(patientscrollPane);
关于我试图重绘表格的相关代码:
tablemodel = controller.createModel(patientlist);
patientTable = new JTable(tablemodel);
patientscrollPane = new JScrollPane(patientTable);
patientTable.setModel(tablemodel);
patientTable.setFillsViewportHeight(true);
patientTable.setPreferredScrollableViewportSize(patientTable.getPreferredSize());
patientTable.validate();
patientscrollPane.validate();
patientTable.repaint();
patientcard.setVisible(true);
registrycard.setVisible(false);
有趣的是,当我调用 patientTable.getTableModel() 时,它不会返回 DefaultTableModel
【问题讨论】:
-
过去,当我尝试从事件调度线程外部更新模型时,这通常发生在我身上。考虑提供一个runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将减少混乱并获得更好的响应
-
谢谢。我现在添加了一个我认为是可运行的示例,删除了很多代码行,并且患者只有 2 个字段(名字、姓氏)等。您也可以通过测试任何样本 CSV 来运行它有名字和姓氏。
-
@MadProgrammer 我现在更新更简单了,请看一下
-
我还应该说,当我重新运行 GUI 时,新患者和新 JTable 会更新,并且我目前正在运行 GUI 的许多窗口(用于测试目的)。
-
patientscrollPane.setSize(968, 505);在我启动 GUI 时也会被调用 - 这会是个问题吗?
标签: java swing jtable refresh defaulttablemodel