Как запретить пользователю генерировать больше событий? - PullRequest
1 голос
/ 15 ноября 2011

Я занимаюсь разработкой настольного Java-приложения.В диалоговой форме есть кнопка «ОК» и «Отмена».Когда пользователь нажимает кнопку «ОК», приложение выполняет некоторую обработку.Как я могу предотвратить повторное нажатие кнопки «ОК» до того, как завершится выполнение события «ОК».Кроме того, я не хочу, чтобы пользователь мог нажимать кнопку отмены, пока ok не закончится.Любая помощь будет высоко оценена.

Ответы [ 5 ]

5 голосов
/ 15 ноября 2011

Управление включениями является неотъемлемой частью логики пользовательского интерфейса.Действие помогает вам в этом:

 Action action = new AbstractAction("myAction") {

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

Осторожно: долго выполняемое задание не должно выполняться в EDT, так что это только на короткий срок, чтобы предотвратить второй или около того щелчокс эффектом

Edit

только что заметил, что вы пометили вопрос с помощью jsr296, тогда это еще проще: вы можете пометить метод вашей модели презентации как @Actionсвяжите его свойство enabled со свойством модели

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

Плюс есть поддержка (много обсуждаемая, но полезная) для задач: в основном SwingWorker с мелкозернистой поддержкой жизненного цикла

1 голос
/ 15 ноября 2011

Если вы хотите отключить все элементы управления, то я бы предложил использовать GlassPane.Смотрите здесь для получения дополнительной информации: http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html

0 голосов
/ 15 ноября 2011

Кажется, что вам нужно что-то вроде ожидающего курсора .

0 голосов
/ 15 ноября 2011

Вы можете отключить свою кнопку как yourButton.setEnabled (false); во время обработки и включите его снова, когда он завершится.

0 голосов
/ 15 ноября 2011

Самый простой способ - отключить кнопку сразу после ее нажатия, а когда выполненное действие завершится, снова включить ее.

...