要在按钮上设置延迟,请单击java?
我在JFrame
有一个保存按钮;点击保存时,“保存”文本设置为“保存….”; 我需要在延迟10秒后将该文本设置为“已保存”。如何在java中实现? 请帮忙…
try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); }
这就是我所做的……但是在这个延迟的时间里,这不会显示为“拯救”。
如果您想向用户提供正在进行某些操作的可视反馈(并且可能会对进度提供一些提示),请转到JProgressBar
和SwingWorker
( 更多详细信息 )。
另一方面,如果您想要有一种情况,当用户单击按钮并且任务应该在后台运行时(当用户执行其他操作时),那么我将使用以下方法:
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就是这样。
- Java序列化问题,同时使用guava Lists.transform
- 两个整数(或多头)没有溢出的平均值,截断为0
- JavaFX警报及其大小
- java.lang.ClassNotFoundException:org.springframework.boot.SpringApplication Maven
- Apache Commons CLI:获取选项的值列表
- 调整apache commons日志记录的日志级别?
- Spring MVC – AngularJS – 文件上传 – org.apache.commons.fileupload.FileUploadException
- HazelCast Tcp-IP的编程配置无需在集群中添加成员
- 在循环中创建新对象的效率