1

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

4

5 回答 5

5

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

 Action action = new AbstractAction("myAction") {

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

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

编辑

刚刚注意到您使用 jsr296 标记了问题,那么它更容易:您可以将演示模型的方法标记为 @Action 并将其启用的属性绑定到模型的属性

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

此外,还有对 Tasks 的支持(有很多争议,但可用):基本上是 SwingWorker,具有细粒度的 beanified 生命周期支持

于 2011-11-15T09:12:14.033 回答
1

如果您想禁用所有控件,那么我建议使用GlassPane. 有关更多信息,请参见此处:http: //docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html

于 2011-11-15T09:39:54.547 回答
0

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

于 2011-11-15T08:38:41.027 回答
0

您可以禁用按钮,例如 yourButton.setEnabled(false); 在您的处理方法期间,并在完成后再次启用它。

于 2011-11-15T08:41:08.457 回答
0

看来您想要的是等待光标之类的东西。

于 2011-11-15T09:25:20.423 回答