Java 在单击时禁用JButton,并在1秒后重新启用它?
我需要在单击时禁用JButton,并在2秒钟后再次启用它,因此我尝试从事件处理程序休眠ui线程,但这会使按钮处于选中状态,您无法读取禁用按钮的文本 代码如下所示:Java 在单击时禁用JButton,并在1秒后重新启用它?,java,swing,Java,Swing,我需要在单击时禁用JButton,并在2秒钟后再次启用它,因此我尝试从事件处理程序休眠ui线程,但这会使按钮处于选中状态,您无法读取禁用按钮的文本 代码如下所示: JButton button = new JButton("Press me"); button.addActionListener(new ActionListener{ public void actionPerformed(ActionEvent ae) { JButton button = ((JBut
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线程上睡眠(UI“冻结”并且没有机会重新绘制)。使用计时器类。” 这是一个他所指的例子。应该接近您想要做的事情:
JButton button = new JButton("Press me");
int delay = 2000; //milliseconds
Timer timer = new Timer(delay, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button.setEnabled(true);
button.setText("");
}
});
timer.setRepeats(false);
button.addActionListener(new ActionListener {
public void actionPerformed(ActionEvent ae) {
JButton button = ((JButton)e.getSource());
button.setEnabled(false);
button.setText("Wait a second")
timer.start();
}
}
不要在UI线程上使用Thread.sleep(UI“冻结”并且没有机会重新绘制)。使用计时器。有许多重复项。您是否尝试过禁用任何事件或计时器代码之外包含文本的按钮,以确认它在任何情况下都能产生您想要的效果@读取javax.swing.Timer的javadoc。在actionPerformed方法中,取消按钮,并启动计时器,该计时器将在1秒后重新启动。在stack exchange meta上进行了讨论,一致同意剽窃评论并将其放入答案中。我不是开玩笑。当然,我会拼凑一个例子。@user2864740谢谢你的输入。我做了一些腿部工作,使答案更完整。@1谢谢,这样更好。我真的很高兴我的评论一开始就被使用了(不需要链接我!),但我不喜欢太简短的回答!一个或两个参考-JB Nizet有一个很好的建议-将有助于完善细节。@user2864740我不完全确定他的意思,但如果有人编辑它,我将接受更改。