Как реализовать логику цикла в приложении Swing?

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

Во-первых, два фрагмента кода, чтобы установить точку отсчета (надеюсь, у меня нет опечаток):

Ввод с Scanner

'''
Scanner sc = new Scanner(System.in);
for (int i=0; i<10; ++ i)  {
  System.out.print("Please input a value:");
  String answer = sc.next();
  // do something with this string
}  
...

Ввод с JOptionPane:

...
for (int i=0; i<10; ++ i) {
   String answer = JOptionPane.showInputDialog("Please input a value");
   // do something with this string
{

Итак, в приведенных выше примерах мы просим пользователя вводить значение фиксированное число раз. Как я могу реализовать такую ​​же функциональность в приложении Swing?

У меня нет проблем с созданием JFrame с JPanel (как его панель содержимого) и добавление JLabel (с подсказкой) и JTextField к этой панели. Я также могу создать ActionListener для текстового поля, которое ActionPerformed метод для получения значения и обработки его. Обработка строк не является длительной задачей, поэтому я не верю, что мне понадобится отдельный рабочий поток.

Поскольку мы не можем заставить пользователя что-либо делать, я планирую использовать javax.swing.Timer обеспечить своевременный ответ.

Что я не понимаю, так это как реализовать цикл или любую другую форму управления, чтобы гарантировать, что пользователь вводит (и программа получает) значение точное число раз. Как ввести такую ​​логику в систему, управляемую событиями?

После того, как я настроил часть GUI и передал ее экземпляр для вызова в EDT, я, похоже, отказался от всего контроля.

Я первоначально отправляю свое текстовое поле с setEditable установлен в false а затем создать цикл, который будет invokeAndWait Runnable чтобы включить редактирование (и отключить его обратно в ActionPerformed)?

Пожалуйста, укажите мне в правильном направлении.

1 ответ

Ну, это зависит от того, как вы хотите добиться этого...

Вы могли бы...

Укажите необходимое количество полей (10 в вашем примере) и JButton, так что, пока все поля не будут заполнены, нажатие кнопки просто предоставит пользователю сообщение и перефокусирует недопустимое поле...

Вы могли бы...

Предоставьте пользователю одно поле (и метку) и кнопку. Пока они не заполняют поле, нажатие кнопки запрашивает их и перефокусирует поле.

Когда пользователь заполняет необходимую информацию и нажимает кнопку, вы увеличиваете счетчик, сбрасываете поле и продолжаете, пока ваш счетчик не достигнет своего предела...

Вы могли бы...

Использовать JTable который имеет только один столбец и пять строк... это упрощенное (в зависимости от вашей точки зрения) решение первого решения...

Другие вопросы по тегам