如何阻止用户生成更多事件?

时间:2011-11-15 08:35:09

标签: java swing desktop-application jsr296

我正在开发一个java swing桌面应用程序。对话框表单有一个确定和取消按钮。当用户单击“确定”按钮时,应用程序会进行某些处理。如何在ok按钮上的事件执行完之前阻止用户再次单击ok。此外,我不希望用户能够按下取消按钮,直到确定完成执行。任何帮助将受到高度赞赏。

5 个答案:

答案 0 :(得分:5)

启用管理是UI逻辑的一个组成部分。行动可以帮助您这样做:

 Action action = new AbstractAction("myAction") {

      public void actionPerformed(ActionEvent e) {
           setEnabled(false);
           doPerform();
           setEnabled(true);
      }
 };
 button.setAction(action);

注意:长时间运行的任务不得在EDT上执行,所以这只是为了短期,以防止第二次左右点击产生影响

修改

注意到您使用jsr296标记了问题,然后更容易:您可以将表示模型的方法标记为@Action并将其enabled属性绑定到模型的属性

@Action (enabledProperty == "idle")
public void processOk() {
    setIdle(false);
    doStuff;
    setIdle(true);
}

另外,对于任务有支持(备受争议,但可用):基本上是SwingWorker,具有细粒度的bean化生命周期支持

答案 1 :(得分:1)

如果要禁用所有控件,我建议使用GlassPane。有关详细信息,请参阅此处:http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html

答案 2 :(得分:0)

最简单的方法是在点击按钮后立即禁用该按钮,并在完成所执行的操作后重新启用它。

答案 3 :(得分:0)

您可以像yourButton.setEnabled(false)一样禁用按钮;在处理方法中,并在完成后再次启用它。

答案 4 :(得分:0)

似乎你想要的东西就像waiting cursor