Почему JDialog не запускает метод keyPressed прослушивателя ключа?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему JDialog не запускает метод keyPressed прослушивателя ключа?

Сообщение Anonymous »

Это мой код

Код: Выделить всё

 JToolBar customizeKeys = new JToolBar();
customizeKeys.add(new ChangeKeyListen("left"));
private class ChangeKeyListen extends AbstractAction{
private JDialog myDialog;
class KeyGetter extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
OtherPanel.this.map(
KeyEvent.getKeyText(e.getKeyCode()),
keyAction);
myDialog.setVisible(false);
myDialog.removeKeyListener(getKeyListeners()[0]);
}
};
public ChangeKeyListen(String name) {
super(name);
}
@Override
public void actionPerformed(ActionEvent e) {
myDialog = new JOptionPane().createDialog("Press a key");
myDialog.setVisible(true);
myDialog.requestFocusInWindow();
System.out.println(myDialog.getFocusableWindowState());
myDialog.addKeyListener(new KeyGetter());
System.out.println( myDialog.getKeyListeners());
}
}
Здесь я пытаюсь сделать следующее: когда пользователь нажимает кнопку JButton, добавленную в JToolBar с атрибутами его действия, пользователю будет предложено ввести мои собственные настраиваемое диалоговое окно. Затем пользователь может нажать любую клавишу, чтобы закрыть диалоговое окно (на самом деле оно просто невидимо). Когда я запускаю приложение, все выглядит нормально. JToolBar выглядит правильно, и кнопка выглядит правильно. Когда я нажимаю кнопку, происходит правильное поведение контроллера, когда появляется диалоговое окно. (только видимое). Однако метод keyPressed адаптера ключа вообще не запускается, когда я нажимаю клавишу.

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

Код: Выделить всё

System.out.println(myDialog.getFocusableWindowState());
и то, что я получил на консоли, было правдой. Затем я убедился, что ключевой прослушиватель настроен. Я сделал это с помощью

Код: Выделить всё

 System.out.println( myDialog.getKeyListeners());
и это распечатано

Код: Выделить всё

[Ljava.awt.event.KeyListener;@350b914b
который, как я предполагал, был правильным адресом памяти для объекта, выделенного из кучи.

Затем я извлек из памяти похожие темы.

Моя проблема не может быть в том, что прослушиватель Jbutton не срабатывает, почему? потому что появилось диалоговое окно, и я убедился, что прослушиватель ключа был добавлен со строкой прослушивателей ключа печати.
Я не смог использовать то, что сказал пользователь в разделе «Попытка использовать прослушиватель клавиш», потому что мне нужно прослушивать нажатие клавиши и использовать это нажатие клавиши позже в моей программе.
И это тоже не помогает. Почему этот KeyEvent не будет работать?
потому что мне нужна общая реакция на нажатия клавиш, чтобы узнать, какая клавиша была нажата.

Я знаю, что keyPressed не выполняется, потому что я поставил внутри точку останова метод и этот оператор печати

Код: Выделить всё

   System.out.println(KeyEvent.getKeyText(e.getKeyCode()));
ничего не печатал на консоли.

Кто-нибудь знает, как я могу решить эту проблему?< /п>

Подробнее здесь: https://stackoverflow.com/questions/271 ... sed-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»