Перенести курсор из одного JTextField в другой при нажатии Enter?

У меня есть один JTextField с именем Name и один JTextArea с именем Address. Мое требование: когда пользователь ввел имя в поле JTextField и нажал клавишу Enter, курсор должен перейти в следующую текстовую область, которая называется Address.

В настоящее время можно перемещаться из одного текстового поля в другое, нажимая клавишу табуляции (я считаю, что это значение по умолчанию). Я бы хотел это запретить и переводить курсор только через клавишу ENTER.

Я пробовал transferfocus(), но клавиша ввода не переводит курсор в текстовую область. Как мне этого добиться?


person user2286075    schedule 10.05.2013    source источник
comment
Вы пробовали `RequestFocus()'?   -  person ErrorNotFoundException    schedule 10.05.2013
comment
Покажите нам свой код для захвата и обработки нажатия клавиши ENTER.   -  person Duncan Jones    schedule 10.05.2013


Ответы (3)


Мое требование: когда пользователь ввел имя в JTextField и нажал клавишу ввода, курсор должен перейти в следующую текстовую область, которая является адресом.

Предполагая, что компоненты следуют друг за другом в обычном порядке табуляции, вы можете написать общий код:

Action enterAction = new AbstractAction()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
        manager.getFocusOwner().transferFocus();
    }
}

...

textField.addActionListener( enterAction );

В настоящее время можно перемещаться из одного текстового поля в другое, нажимая клавишу табуляции (я считаю, что это значение по умолчанию). Хотелось бы запретить это и переводить курсор только через клавишу ENTER.

Почему вы хотите это запретить. Как вы говорите, вкладка используется по умолчанию, поэтому большинство пользователей будут знакомы с этим подходом. Не изобретайте пользовательский интерфейс заново и дайте пользователям выбор.

person camickr    schedule 10.05.2013

Я думаю, что вы используете Swing.. Извините за поздний ответ..

JTextField -> щелчок правой кнопкой мыши -> событие нажатия клавиши goto

private void NameKeyPressed(java.awt.event.KeyEvent evt) {
        int a = evt.getKeyCode();
        if (a == 10) {                     // for enter key
          Address.requestFocus();
        } 
}
person sathya    schedule 08.04.2014

Ответ @satya правильный, однако небольшое изменение, чтобы избежать магических чисел:

private void jTextFieldItmCodeKeyPressed(java.awt.event.KeyEvent evt) {                                             
    if(evt.getKeyCode()==KeyEvent.VK_ENTER){
       Address.requestFocus();
    }   
}
person mali    schedule 08.04.2015