我有一个互动的主JFrame,即用户设置不同的选项。按下“运行”按钮后,配置文件将根据用户首选项创建,并传递给程序的下一部分。完成一些计算并将结果写入文件。程序的第三部分读取结果文件并对其进行总结。
然后打开子JFrame,其中包含带有多个JPanel的JTabbedPane。每个JPanel都显示不同的JTable及相关信息。子JFrame具有DISPOSE_ON_CLOSE方法,否则两个JFrame都将被终止。
所以问题是,如果用户更改了一些选项,再次运行程序,新的子JFrame实际上并不是新的 - 它只显示第一次运行的信息。我试过了:
invalidate()
revalidate()
repaint()
没有任何帮助。我不知道问题出在哪里。我很确定在更改选项后会读取新的结果文件,因为它会在控制台中打印。
可能是其他重要的事情是表格是先创建的,而子JFrame是最新的。
答案 0 :(得分:1)
可能是因为您的代码中有某处:
table = new JTable(...);
这不会将表添加到GUI。您应该通过执行以下操作来刷新现有表中的数据,而不是创建新表:
TableModel model = ....
table.setModel( model );
这将导致数据自动重新绘制。不需要invalidate(),revalidate()或repaint()。