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

Java 如何关联“按”;输入“;点击按钮?,java,swing,listener,keypress,Java,Swing,Listener,Keypress,在swing程序中,我有一个JTextField和一个JButton。我希望,一旦用户按下“enter”键,JButton的actionListener就会运行。我该怎么做? 提前感谢。JRootPane有一个方法setDefaultButton(JButton button),可以执行您想要的操作。如果您的应用程序是JFrame,它将实现RootPaneContainer接口,您可以通过在JFrame上调用getRootPane()来获取根窗格,然后在返回的根窗格上调用setDefaultBu

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

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

这里有一个例子


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

摆脱ActionListeners。这是做听众的老方式。毕业于行动班。诀窍在于理解输入图和动作图的工作原理。这是Swing的一个独特功能,非常好:

以下是您的操作方法:

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( ) );
使用“聚焦”组件的“何时祖先”允许面板从其任何子级(即祖先)接收键盘事件。因此,无论哪个组件具有焦点,只要它位于面板内,击键都将调用ActionMap中“submit”下注册的任何操作


这允许您通过共享菜单、按钮或击键来重用它们。

键绑定在许多情况下都很有用,但如果您可以使用提供的其他更简单的解决方案(可能在后台使用键绑定),则对当前的问题来说并不是一点过分。取决于作者没有指定这是在对话框本身上还是在主UI上。使用setDefaultButton()时,假定它是对话框中唯一的内容。更不用说了解操作以及它们与Swing工具箱其余部分的关系,还可以进一步了解其他主题,如菜单绑定、全局击键和自定义默认组件的键映射。另外,任何使用ActionListener的人都需要意识到,在任何情况下,动作都是优越的。“任何使用ActionListener的人都需要意识到,在任何情况下,动作都是优越的。”——嗯,我被教导说,所有的概括都是错误的一旦你采取行动,你就永远不会采取行动严肃地说,ActionListener在集成、易用性和集中化功能方面被Actions所取代,而使用ActionListener更难管理这些功能。@chubbard:“因此,您应该注意只在需要的地方使用
Action
s,并在其他地方使用简单的ActionListener。”-这是否只有在初始化了要使用的组件后才起作用。getRootPane()在该组件上运行?如果是这样的话,那就意味着我不能将它直接构建到该组件的构造函数中,是吗?@LucasMorgan:你需要一个JRootPane才能让它工作,这是有意义的。否则,您可能需要使用键绑定。getRootPane().setDefaultButton(JButton defaultButton);