【发布时间】:2011-06-09 20:14:43
【问题描述】:
在我的挥杆程序中,我有一个 JTextField 和一个 JButton。我想,一旦用户按下“输入”键,JButton 的 actionListener 就会运行。我该怎么做? 提前致谢。
【问题讨论】:
-
getRootPane().setDefaultButton(JButton defaultButton);
标签: java swing listener keypress
在我的挥杆程序中,我有一个 JTextField 和一个 JButton。我想,一旦用户按下“输入”键,JButton 的 actionListener 就会运行。我该怎么做? 提前致谢。
【问题讨论】:
标签: java swing listener keypress
摆脱 ActionListener。这是做听众的旧作风。毕业到行动班。诀窍是了解 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 中“提交”下注册的任何操作。
这允许您通过共享菜单、按钮或击键来重复使用操作。
【讨论】:
Actions,并在其他地方使用简单的 ActionListener。”— download.oracle.com/javase/6/docs/api/javax/swing/Action.html
这里有一个例子
http://www.java2s.com/Code/Java/Swing-JFC/SwingDefaultButton.htm
这就是你需要的:rootPane.setDefaultButton(button2);
【讨论】:
JRootPane 有一个方法 setDefaultButton(JButton button) 可以做你想做的事。如果你的应用是 JFrame,它实现了 RootPaneContainer 接口,你可以通过在 JFrame 上调用 getRootPane() 来获取根窗格,然后在返回的根窗格上调用 setDefaultButton。相同的技术适用于 JApplet、JDialog 或任何其他实现 RootPaneContainer 的类。
【讨论】: