KeyEvent и JOptionPane - Java
Формулировка задачи:
Добрый день.
На панели JPanel расположены два JTextField с обработкой нажатия клавиши Enter (напр., смена фокуса). Если поле ввода пустое, выводится сообщение через JOptionPane.showMessageDialog. Если на этом диалоге нажать Enter, то он передается активному JTextField и таким образом Enter срабатывает дважды.
Это как-то можно победить? Например, можно как-то определить, что в текущий момент активно диалоговое окно или перехватить KeyEvent у JTextField или заблокировать обработку KeyEvent элементами панели?
Решение задачи: «KeyEvent и JOptionPane»
textual
Листинг программы
import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; public class EnterTest extends JFrame{ JPanel LoginPanel = new JPanel(); JTextField Edit1 = new JTextField(); JTextField Edit2 = new JTextField(); private Boolean ok = false; public static void main(String args[]){ EnterTest ent = new EnterTest(); ent.start(); } private void start() { this.setSize(150, 100); this.setLayout(new GridLayout(1,2)); this.setDefaultCloseOperation(EXIT_ON_CLOSE); LoginPanel.add(Edit1); LoginPanel.add(Edit2); addKey(); this.add(LoginPanel); this.add(Edit1); this.add(Edit2); this.setVisible(true); } private void addKey(){ Edit1.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { if("".equals(Edit2.getText())) Edit2.requestFocus(); if("".equals(Edit1.getText())) UserLogined(); if("".equals(Edit1.getText()) && "".equals(Edit2.getText())) Edit1.requestFocus(); } } }); Edit2.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { if("".equals(Edit2.getText())) UserLogined(); if("".equals(Edit1.getText())) UserLogined(); } } }); } private void UserLogined() { if (Edit1.getText().equals("")) { JOptionPane.showConfirmDialog(null, "Введите имя пользователя.", "alert", JOptionPane.OK_CANCEL_OPTION); Edit1.requestFocus(); } else if (Edit2.getText().equals("")) { JOptionPane.showConfirmDialog(null, "Задан пустой пароль.", "alert", JOptionPane.OK_CANCEL_OPTION); Edit2.requestFocus(); } else { } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д