我有一个带边框布局的 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);
}
});
最佳答案
1) 这是与 EventDispatchThread
相关的问题,EDT 非常保证对 GUI 的所有更改都会立即完成
2) 你从JButton
调用了ActionPerformed
,直到所有事件结束你的GUI应该被卡住或者不负责任,对于JButton
和JLabel
在您的情况下
3) 最好将 File
内容的读取重定向到 Backgroung 任务,例如SwingWorker
或 Runnable#Thread
然后 JButton
和 JLabel
将被更改,并且 GUI 将在后台任务期间负责鼠标或键盘
或
4) 脏黑客 split 为两个单独的 Action
,由 javax.swing.Timer
延迟,但在这种情况下,直到所有事件结束,您的 GUI 将被卡住或不负责任
关于java - 为什么 setVisible 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9006075/