Swing:启用延迟按钮
private void OptionsActionPerformed(java.awt.event.ActionEvent evt) { // After clicking on button X, I want 4 other buttons to show up // in a sequential order ButtonTrue(); } public void ButtonTrue() { Audio_Options.setVisible(true); letsSleep(); Control_Options.setVisible(true); letsSleep(); Display_Options.setVisible(true); letsSleep(); Network_Options.setVisible(true); } public void letsSleep() { try { Thread.sleep(10000); } catch (InterruptedException ex) { Logger.getLogger(MainMenu.class.getName()).log(Level.SEVERE, null, ex); } }
我有4个按钮。 我希望它们按顺序出现,例如:Button1 – 10秒 – Button2 – 10秒 – Button3 – 10秒 – 按钮4
问题:每当我调用函数“ButtonTrue()”时,它们都会在等待30秒后一起出现。 什么可能导致这个问题发生?
-
不要将
Thread.sleep(int)
用于Swing JComponent ,因为阻止了当前的EDT -
你看看Swing Timer
你应该使用不同的线程:
javax.swing.Timer timer = new Timer(10000, new ActionListener() { public void actionPerformed(ActionEvent evt) { //...Update the progress bar... Control_Options.setVisible(true); timer.stop(); } }); timer.start();
您的按钮必须是最终的,以便在匿名ActionListener的范围内。
我认为问题是所有setVisble调用都在一个线程内,而不是EventDispatchThread。 你可以试试:
if(EventQueue.isDispatchThread()) { ButtonTrue(); } else { EventQueue.invokeAndWait(new Runnable() { ButtonTrue(); }); }