我有一个带边框布局的swing GUI。在NORTH
我添加了一些组件。
我的带有GIF图标的标签组件是不可见的lblBusy.setVisible(false);
稍后一个按钮使其像下面一样可见。为什么它没有出现?
btnDownload.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
lblBusy.setVisible(true);
btnCancel.setEnabled(true);
}
});
download = new Download(txtSource.getText(), new File(txtDestination.getText()), textAreaStatus);
download.start();
lblBusy.setVisible(false);
}
});
答案 0 :(得分:3)
1)这是EventDispatchThread
相关问题,EDT相当保证GUI的所有更改都会在一瞬间完成
2)您从ActionPerformed
调用了JButton
,并且直到您的GUI结束的所有事件都应该冻结或不负责任,对于您的案例中的JButton
和JLabel
相同< / p>
3)最好将File
内容的重定向重定向到Backgroung任务,例如SwingWorker
或Runnable#Thread
然后JButton
和JLabel
将被更改,GUI将在负责鼠标或KeyBoard的后台任务中出现
或
4)脏兮兮的黑客被分成两个被Action
分隔的javax.swing.Timer
延迟{{1}},但在这种情况下,直到所有事件结束,你的GUI将被冻结或不负责任
答案 1 :(得分:2)
很可能是因为GUI在标签不可见时被打包,因此没有分配空间来显示它。更明确的是,发布SSCCE。
答案 2 :(得分:2)
在我看来,您在mouseClicked()方法中编写lblBusy.setVisible(true);
之后写lblBusy.setVisible(false);
。既然您只想点击按钮就可以看到它,那么您不是仅使用lblBusy.setVisible(true);
,而是使用两者。
您可以在下载类的末尾调用lblBusy.setVisible(false);
,一旦完成它的操作,就可以调用它。
此致