如何关联按“输入”与点击按钮?

时间:2011-01-16 00:58:33

标签: java swing listener keypress

在我的swing程序中,我有一个JTextField和一个JButton。我想,一旦用户按下“回车”键,JButton的actionListener就会运行。我该怎么做? 提前谢谢。

3 个答案:

答案 0 :(得分:10)

JRootPane有一个方法setDefaultButton(JButton按钮)可以做你想要的。如果您的应用程序是JFrame,它会实现RootPaneContainer接口,您可以通过在JFrame上调用getRootPane()来获取根窗格,然后在返回的根窗格上调用setDefaultButton。相同的技术适用于JApplet,JDialog或任何其他实现RootPaneContainer的类。

答案 1 :(得分:3)

这里有一个例子

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

这就是你需要的:rootPane.setDefaultButton(button2);

答案 2 :(得分:2)

摆脱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中“submit”下注册的任何动作。

这允许您通过共享菜单,按钮或按键来重复操作。