Как запретить пользователю генерировать больше событий?
Я занимаюсь разработкой настольного Java-приложения. В диалоговой форме есть кнопка "ОК" и "Отмена". Когда пользователь нажимает кнопку "ОК", приложение выполняет некоторую обработку. Как я могу предотвратить повторное нажатие кнопки "ОК" до того, как завершится выполнение события "ОК". Кроме того, я не хочу, чтобы пользователь мог нажимать кнопку отмены до тех пор, пока ok не выполнится. Любая помощь будет высоко оценена.
5 ответов
Управление включениями является неотъемлемой частью логики пользовательского интерфейса. Действие помогает вам в этом:
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 с мелкозернистой поддержкой жизненного цикла.
Если вы хотите отключить все элементы управления, то я бы предложил использовать GlassPane
, Смотрите здесь для получения дополнительной информации: http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html
Вы можете отключить свою кнопку как yourButton.setEnabled(false); во время вашего метода обработки и включите его снова, когда он закончится.
Самый простой способ - отключить кнопку сразу после ее нажатия, а когда выполненное действие завершится, затем снова включить ее.