【发布时间】:2015-04-02 16:22:02
【问题描述】:
我需要在单击时禁用 JButton 并在 2 秒后再次启用它,因此我尝试从事件处理程序中休眠 ui 线程,但这会使按钮处于无法读取的选定状态禁用按钮的文本。
代码如下所示:
JButton button = new JButton("Press me");
button.addActionListener(new ActionListener{
public void actionPerformed(ActionEvent ae) {
JButton button = ((JButton)e.getSource());
button.setEnabled(false);
button.setText("Wait a second")
button.repaint();
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
}
button.setEnabled(true);
button.setText("");
}
会发生什么情况是按钮保持在“被选中”状态,2 秒内没有文本,并在最后立即禁用和重新启用按钮,这不是我想要的,我的目标是是按钮保持禁用状态并显示文本两秒钟,然后重新启用。
我该怎么办?
【问题讨论】:
-
不要在 UI 线程上使用 Thread.sleep(UI “冻结”并且 没有机会重新绘制)。使用计时器。有很多重复。
-
您是否尝试在任何事件或计时器代码之外禁用任何包含文本的按钮,以确认它在任何情况下都能产生您想要的效果?