JAVA - Создание события KeyPress во время события нажатия кнопки слушателя действия кнопки - PullRequest
1 голос
/ 16 апреля 2011

Я сейчас создаю Java-приложение Судоку с графическим интерфейсом.

Сетка для отображения головоломки Судоку - это просто двумерный массив myJButton (реализующий JButton) - для этой проблемы их можно рассматривать как обычные JButton.

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

Есть ли способ разрешить создание нажатия клавиши KeyAdapter при нажатии кнопки, чтобы разрешить нажатие клавиши - физическая клавиша 1,2,3,4,5,6,7,8,9,0

Я бы хотел, чтобы слушатель действия работал только при нажатии кнопки.

Более простой пример этого - кадр с одной кнопкой. когда кнопка нажата, пользователь может нажать физическую клавишу на клавиатуре, установив текст кнопки в значение клавиши. Дополнительные нажатия клавиш не изменят текст кнопки, если только кнопка не будет нажата первой.

class ClickAction implements ActionListener { // Action Listener called when button is Pressed

    public void actionPerformed(ActionEvent ae) {

        //need a way to create a keyevent listener here

    }
}

Заранее спасибо всем, кто может ответить на этот вопрос!

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Я бы использовал другое решение.Вместо создания прослушивателей KeyEvent при каждом нажатии кнопки вы можете зарегистрировать прослушиватель ключей во время запуска приложения.Затем вы можете использовать флаг, чтобы проверить, была ли кнопка нажата первой.Только если этот флаг имеет значение true, вы выполняете действия в слушателе KeyEvent.В противном случае вы пропустите все операторы в прослушивателе KeyEvent.

Вот пример:

public class TestClass {

    private boolean isButtonClicked = false;

    public void testYourButtons() {

        JButton myButton = new JButton();
        myButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                isButtonClicked = !isButtonClicked;
            }
        });

        myButton.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent arg0) {
                // TODO Auto-generated method stub  
            }

            @Override
            public void keyReleased(KeyEvent arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void keyPressed(KeyEvent arg0) {
                if (isButtonClicked) {
                    // TODO Do here your event handling
                    isButtonClicked = false;
                }
            }
        });

    }

}
0 голосов
/ 16 апреля 2011

Как я обнаружил, вы можете создать любое новое событие и затем отправить его через Component.processXxxEvent()

...