我有一个包含大量 JInternalFrames 的 swing 应用程序。其中之一从数据库中加载表单加载数据。我需要它,以便在一个 Action 事件中,JInternalFrames 完全重新加载到它第一次显示数据库中的新数据时的状态。我尝试了几个选项,例如:
revalidate(), repaint(); updateUI()
但它们都不起作用。
public void actionPerformed(ActionEvent ae) {
Object obj = ae.getSource();
if (obj == btnAdd) {
try {
..................
revalidate();
// repaint();
//updateUI();
} catch (Exception db) {
JOptionPane.showMessageDialog(this, db,
"Error", JOptionPane.ERROR_MESSAGE);
}
}
}
如何在不先关闭整个 JInternalFrame 的情况下重新加载它?
最佳答案
revalidate()
和repaint()
是添加、删除、修改(更改大小、属性而不是值)的有效方法
一个新的JComponent
(s) 到已经可见的 GUIrevalidate()
&repaint()
可能是对可见 Swing GUI 的所有更改完成后的最后一行代码,revalidate()
和repaint()
没有将数据从数据库重新加载到JComponents
作为值可见的 Swing GUI,那么您遇到了 Concurency in Swing 的问题使用
<Runnable#Thread
(需要将所有输出到Swing GUI的wrapp到invokeLater
)或SwingWorker
,有一些有趣的方法为你的工作publish()
、proccess()
和done()
,这些方法默认会通知 EDT
关于java - 重新加载 JinternalFrame Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15659146/