Это мой кодПочему JDialog не запускает keyPressed метод прослушивания клавиш?
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 listener isn't triggered, why?, потому что появилось диалоговое окно, и я убедился, что прослушиватель клавиш был добавлен с помощью строки прослушивания клавиш печати. Я не мог использовать то, что пользователь сказал в Trying to use key Listener, потому что мне нужно прослушивать нажатие клавиши и использовать эту клавишу позже в моей программе. И это не помогает Why wont this KeyEvent work? , потому что мне нужна общая реакция на нажатия клавиш для получения нажатой клавиши.
Я знаю, что Keypressed не выполняется, потому что я поставил точку останова внутри метода, и этот оператор печати
System.out.println(KeyEvent.getKeyText(e.getKeyCode()));
ничего на консоли не было печати.
Кто-нибудь знает, как я могу исправить эту проблему?
Я имею в виду, я мог бы включать в себя, что в диалоговом окне сообщения – committedandroider
@committedandroider, такие компании, как Microsoft и Apple, тратить миллионы долларов на разработку последовательной интерфейсы, которые может использовать любой пользователь. Почему, по-вашему, вам нужно разработать собственный пользовательский интерфейс. Диалог должен быть закрыт нажатием кнопки или с помощью клавиши эвакуации. Вы не нажимаете ни одной клавиши, чтобы закрыть диалог. – camickr
Да, спасибо. Я помню это. Но с точки зрения этого проекта я изменил myDialog.addKeyListener (новый KeyGetter()); просто добавитьKeyListener (новый KeyGetter()); myDialog.removeKeyListener (getKeyListeners() [0]); и удалитьKeyListener (getKeyListeners() [0]); так что слушатель клавиш будет прикреплен к Jbutton вместо этого. Но диалоговое окно все равно не будет закрыто .... – committedandroider