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 {
 
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5