Подтвердить что ты не робот

Как связать нажатие "enter" с помощью кнопки?

В моей программе качания у меня есть JTextField и JButton. Я бы хотел, чтобы, как только пользователь нажимает клавишу "enter", запускается actionListener JButton. Как мне это сделать? Спасибо заранее.

4b9b3361

Ответ 1

JRootPane имеет метод setDefaultButton (кнопка JButton), который будет делать то, что вы хотите. Если ваше приложение является JFrame, оно реализует интерфейс RootPaneContainer, и вы можете получить корневую панель, вызвав getRootPane() в JFrame, а затем вызовите setDefaultButton на корневой панели, которая была возвращена. Тот же метод работает для JApplet, JDialog или любого другого класса, который реализует RootPaneContainer.

Ответ 3

Избавьтесь от ActionListeners. Это старый стиль для слушателей. Выпускник класса Action. Хитрость заключается в понимании работы InputMaps и ActionMaps. Это уникальная особенность Swing, которая действительно очень приятная:

http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

Вот как вы это делаете:

JPanel panel = new JPanel();
panel.setLayout( new TableLayout( ... ) );
Action someAction = new AbstractAction( "GO" )  {
    public void actionPerformed() {
    }
};

InputMap input = panel.getInputMap( JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );

input.put( KeyStroke.getKeyStroke( "enter", "submit" );
panel.getActionMap().put("submit", someAction );

panel.add( button = new JButton( someAction ) );
panel.add( textField = new JTextField( ) );

Использование WHEN_ANCESTOR_OF_FOCUSED_COMPONENT позволяет панели получать события клавиатуры от любого из них (например, предков). Поэтому независимо от того, какой компонент имеет фокус, пока он находится внутри панели, нажатие клавиши вызовет любое действие, зарегистрированное в разделе "отправить" в ActionMap.

Это позволяет вам повторно использовать действия в меню, кнопках или нажатиях клавиш, деля их.