我有一个 JButton,我们称其为“按钮”并向其添加一个 ActionListener:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
call();
}
});
它已正确添加到我的框架等中。在该 JFrame 中,我还有一个 JLabel,并且我想在 JButton 方法工作时更改其文本(因为需要大约 30 秒才能完成)。我怎么做?我必须使用一些多线程的东西吗? 基本原理如下(JLabel称为输出):
public void call(){
output.setText("test1");
try { Thread.sleep(1000);
} catch (InterruptedException e) {}
output.setText("test2");
}
这将导致“输出”标签在一秒钟后更改为“test2”。如何让它立即显示“test1”?
最佳答案
不要使用Thread.sleep()。这将阻止 GUI 重新绘制自身。
Do I have to use some multi-thread-thingy?
是的。
对于长时间运行的任务,您需要启动一个单独的线程
,以便 GUI 可以保持响应。
在这种情况下,您可以使用 SwingWorker
。
阅读 Swing 教程中关于 Concurrency 的部分了解更多信息和使用 SwingWorker
的示例。
关于java - 当 JButton 监听器工作时更改 JLabel 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40773207/