Как реализовать логику цикла в приложении 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
который имеет только один столбец и пять строк... это упрощенное (в зависимости от вашей точки зрения) решение первого решения...