Избавьтесь от 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.
Это позволяет повторно использовать действия в меню, кнопках или нажатиях клавиш путем совместного использования.их.