2015-11-23 2 views
0

Я пытаюсь создать кадр на Java с помощью NetBeans. Он отобразит некоторые данные и в то же время получит данные от пользователя в цикле while.Приостановить цикл while до нажатия кнопки подтверждения в NetBeans

Могу ли я приостановить цикл while до тех пор, пока не будет нажата кнопка подтверждения? Я обнаружил, что кто-то может предложить спать, но, поскольку я должен позволить пользователю вводить данные, я не могу предсказать, сколько времени они будут принимать.

+0

Почему бы вам не зациклиться в первую очередь, когда вы все еще ждали, когда пользователь нажмет кнопку/входные данные? – SomeJavaGuy

+0

Итак, «в Netbeans» вы, вероятно, имеете в виду, что используете дизайнер пользовательского интерфейса Netbeans для рисования окна вашей программы? Netbeans - это только редактор, вы все еще создаете здесь программу Java, а не «программу netbeans». – Gimby

+0

Кевин Эше, это потому, что в другой ситуации у меня есть различное количество ввода от пользователя. Например, в ситуации 1 пользователю необходимо ввести 3 данных. Принимая во внимание, что в ситуации 2, 4 данные для входа. Вот почему я использую цикл. – user5595027

ответ

3

Управляемая событиями модель графического интерфейса прерывает последовательный логический код.

Чтобы сохранить последовательную логику, можно поддерживать состояние, например, перечисление:

enum State { 
    PROMPTING, 
    ASKING_TWO_FIELDS, 
    ASKING_THREE_FIELDS, 
    CALCULATING, 
    DONE 
}; 

private State state = State.DONE; 

(Это явная абстракция часто требуется только для перехода от последовательной логики или нескольких государств на том же формы.)

Затем нажмите кнопку и измените состояние и отключите входные компоненты.

События происходят из асинхроны, возможно даже на разных потоках. Нужно написать реактивный код. И при подготовке вещей прокладывайте вместе то, что должно произойти при нажатии кнопки. Это очень фрагментарно.

Одно из решений этого хаоса разделено на классы Model-View-Control. Классы моделей содержат данные, View - это компоненты GUI, и один контроллер, приложение, вызывается из представлений, задает данные и управляет представлениями.

Вызывается из представлений для качания с использованием прослушивателей.

Рецепт:

  • Сделать основной класс является контроллер
  • класс модели данных
  • вид сверху, класс GUI, JFrame на (качели) или JavaFX сцены
  • Контроллер сохраняет модель и вид в виде полей
  • Контроллер передает себя на вид
  • Составьте свою последовательную логику в состояние перечисления, в c ontroller
  • Запись функций перехода.
  • Вместо ожидания добавьте ActionListeners в butten (swing)/ButtonHandlers (JavaFX), который вызывает i.a. switchState.
  • Наилучшие имена методов использования, выражающие бизнес-логику: startTranslating (текст опущен на приложение), manualTranslationDone (кнопка «переведена» нажата после ручного редактирования).
+0

Примечание: в NetBeans 'JFrame' уже создаются с использованием структуры 'main class', и, на мой взгляд, поскольку графические приложения могут и должны базироваться на входе и выходе GUI, имеет смысл иметь' JFrame' (GUI) в качестве основного класса (в смысле запуска и запуска программы). Чтобы поддерживать модель MVC, события GUI просто привязываются к вызовам методов в 'controller', который получает инструкции от GUI и отвечает за организацию и выполнение' model 'и процессов внутри них, через EDT (Event Dispatch Thread) или другие «рабочие потоки». – XenoRo

+0

@ TheLima Я тоже пользователь NetBeans, и могу согласиться с этим: немного проще создать контроллер в JFrame. Спасибо, что предоставили дополнительную перспективу. –