А не лучше ли листенер присобачить к контролу, который получает ввод с клавиатуры? Кнопке или edit'у...
Если я ничего не путаю, то твой код будет работать только в том случае, если contentPane имеет фокус...
VK_ENTER Как быть ???
Модератор: Absurd
Даже самый дурацкий замысел можно воплотить мастерски
По поводу кнопки: глянь JRootPane.setDefaultButton(JButton defaultButton) - работает точно.
С JTextField будем разбираться, что там не путём.
С JTextField будем разбираться, что там не путём.
Даже самый дурацкий замысел можно воплотить мастерски
Oleg_S, если установить defpushbutton
, то именно эта кнопка отработает, если ты нажмёшь ввод. Т.е. типа кнопка будет слушать клавиатуру. Точнее ей будет передано управление по нажатию Enter. У меня есть рабочий код 4-хлетней давности, который использует сочетание keyListener'а и setDefaultButton. Без setDefaultButton он не работает как ожидается, но в этом надо подробнее разбираться, на что пока нет времени...

Даже самый дурацкий замысел можно воплотить мастерски
А такой вопрос (почти в тему):
Допустим, хотим что то сделать, когда нажимается не просто Enter, а Ctrl+Enter, делаем следующее:
Так вот, при нажатом Ctrl getKeyCode() возвращает 0, а не код клавишы Enter, поэтому условие в if не выполняется при нажатии Enter. Как быть?
Допустим, хотим что то сделать, когда нажимается не просто Enter, а Ctrl+Enter, делаем следующее:
Код: Выделить всё
messageField.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent ke){
if (ke.isControlDown()) {
if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
//System.out.println("Ctrl+Enter");
}
}
}
});
Из документации:
Пользуйся KEY_PRESSED и KEY_RELEASED...Комбинации клавиш, которые не "производят" какого-либо UNICODE символа (типа F1), НЕ ГЕНЕРЯТ KEY_TYPED событие
Может и поздновато, но все же...
При нажатии Enter в JTextField генерируется Action. Т.е. можно использовать ActionListener.
При нажатии Enter в JTextField генерируется Action. Т.е. можно использовать ActionListener.
Код: Выделить всё
private JTextField name = new JTextField(10);
...
...
Action nameAction = new AbstractAction()
{
public void actionPerformed(ActionEvent event)
{
doSomeThing();
}
};
...