要在按钮上设置延迟,请单击java?

我在JFrame有一个保存按钮;点击保存时,“保存”文本设置为“保存….”; 我需要在延迟10秒后将该文本设置为“已保存”。如何在java中实现? 请帮忙…

 try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } 

这就是我所做的……但是在这个延迟的时间里,这不会显示为“拯救”。

如果您想向用户提供正在进行某些操作的可视反馈(并且可能会对进度提供一些提示),请转到JProgressBarSwingWorker ( 更多详细信息 )。

另一方面,如果您想要有一种情况,当用户单击按钮并且任务应该在后台运行时(当用户执行其他操作时),那么我将使用以下方法:

 button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { button.setEnabled(false); // change text if you want new SwingWorker() { @Override protected Void doInBackground() throws Exception { // Do the calculations // Wait if you want Thread.sleep(1000); // Dont touch the UI return null; } @Override protected void done() { try { get(); } catch (Exception ignore) { } finally { button.setEnabled(true); // restore the text if needed } } }.execute(); } }); 

最后,使用Swing特定计时器的初始解决方案:

 final JButton button = new JButton("Save"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // Take somehow care of multiple clicks button.setText("Saving..."); final Timer t = new Timer(10000, new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { button.setText("Saved"); } }); t.setRepeats(false); t.start(); } }); 

这个问题和前3个答案正朝着错误的轨道前进。

  • 使用JProgressBar来显示正在发生的事情。 如果任务的长度未知,则将其设置为不确定,但可能您知道需要保存多少以及当前保存多少。
  • 不要阻止EDT(事件调度线程) – 当发生这种情况时,GUI将“冻结”。 使用SwingWorker进行长时间运行的任务。 有关更多详细信息,请参阅Swing中的并发 。

最好的方法是使用一个计时器,它的方法会延迟执行: http : //developer.apple.com/library/mac/documentation/java/reference/javase6_api/api/java/util/Timer.html#schedule(java .util.TimerTask ,很久)。 使用timertask来包装你的runnable就是这样。