Как связать нажатие «ввода» с нажатием кнопки? - PullRequest
11 голосов
/ 16 января 2011

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

Ответы [ 3 ]

10 голосов
/ 16 января 2011

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

3 голосов
/ 16 января 2011

здесь есть пример

http://www.java2s.com/Code/Java/Swing-JFC/SwingDefaultButton.htm

это то, что вам нужно: rootPane.setDefaultButton (button2);

2 голосов
/ 16 января 2011

Избавьтесь от ActionListeners.Это старый стиль для слушателей.Выпускник в классе действий.Хитрость заключается в понимании работы 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 позволяет панелиполучать события клавиатуры от любого его потомка (т.е. предков).Поэтому независимо от того, какой компонент находится в фокусе, пока он находится внутри панели, нажатие клавиши будет вызывать любое действие, зарегистрированное в разделе «submit» в ActionMap.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...