繁体   English   中英

每次通过一个循环向jTable添加一行?

[英]Add a row to a jTable each pass through a loop?

我有一个jTable和一个jButton。 单击时,按钮的actionPerformed方法调用另一个包含while循环的方法,并在每次循环时向表的模型(DefaultTableModel)添加一行。 while循环可以运行几分钟,所以我希望它在GUI中显示每次添加到表中的行,一个接一个。 但是现在它在循环结束后将所有行一起添加到表中,所以不是在几分钟内逐个递增行数,而是从显示0行的表的几分钟到然后立刻有成千上万。 我试过在表上调用updateUI,重绘等,以及在模型上调用fireTabledDataChanged等,但这没有任何区别。 我也试过使用Swing Timer但无济于事。 我很感激提供任何帮助或指导,谢谢。

阅读Swing教程中的Concurrency部分,该部分详细介绍了EDT的工作原理。 除了创建自己的Thread并使用SwingUtilties.invokeLater()之外,您还可以使用更新的方法来使用SwingWorker。 本教程包含一个示例。

我试过调用updateUI,

永远不要做那样的事情。 即使它解决了您的问题,也是错误的解决方案。 您没有更新UI,而是要更新组件。

如果您使用的是DefaultTableModel ,则在每次迭代期间在模型上调用addRow应该更新模型,然后应该更新JTable 该表将要求重新绘制,该请求将在EDT上进行。 不幸的是,您的长时间运行过程会阻止其他请求在EDT上处理。 你要做的最好的事情就是让你的按钮在工作线程中触发一个进程,然后该线程可以在Runnable中执行addRow调用,该调用通过SwingUtilities.invokeLater被放到EDT上

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM