在 JTextField 中检测回车键
Posted
技术标签:
【中文标题】在 JTextField 中检测回车键【英文标题】:Detect enter press in JTextField 【发布时间】:2011-05-24 02:38:30 【问题描述】:是否可以检测到有人在 java 中输入 JTextField 时按下 Enter 的时间?无需创建按钮并将其设置为默认值。
【问题讨论】:
【参考方案1】:对于框架中的每个文本字段,调用 addKeyListener 方法。然后实现并覆盖 keyPressed 方法,正如其他人所指出的那样。现在,您可以从框架中的任何字段按 Enter 键来激活您的操作。
@Override
public void keyPressed(KeyEvent e)
if(e.getKeyCode() == KeyEvent.VK_ENTER)
//perform action
【讨论】:
【参考方案2】:其他答案(包括接受的答案)都很好,但如果您已经使用 Java8,则可以执行以下操作(以更短、更新的方式):
textField.addActionListener(
ae ->
//dostuff
);
正如公认的答案所说,您可以简单地使用ActionListener
做出反应,它会捕获 Enter-Key。
但是,我的方法利用了 Java 8 中引入的函数概念。
如果您想对按钮和 JTextField 使用相同的操作,您可以执行以下操作:
ActionListener l = ae ->
//do stuff
button.addActionListener(l);
textField.addActionListener(l);
如果需要进一步解释,请告诉我!
【讨论】:
【参考方案3】:你想做这样的事情吗?
JTextField mTextField = new JTextField();
mTextField.addKeyListener(new KeyAdapter()
@Override
public void keyPressed(KeyEvent e)
if(e.getKeyCode() == KeyEvent.VK_ENTER)
// something like...
//mTextField.getText();
// or...
//mButton.doClick();
);
【讨论】:
第一个答案实际上准确地回答了问题【参考方案4】:如果您想在 JTextField 输入中设置默认按钮操作,您必须这样做:
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
它是 [0] 因为一个按钮可以有很多动作,但通常只有一个 (ActionPerformed)。
【讨论】:
【参考方案5】:JTextField function=new JTextField(8);
function.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
//statements!!!
);
您需要做的就是将ActionListener 添加到上面的JTextField 中!按下 Enter 后,该操作将在语句中执行您想要的操作!
【讨论】:
【参考方案6】:JTextField
旨在使用 ActionListener
,就像 JButton
一样。参见JTextField
的addActionListener()
方法。
例如:
Action action = new AbstractAction()
@Override
public void actionPerformed(ActionEvent e)
System.out.println("some action");
;
JTextField textField = new JTextField(10);
textField.addActionListener( action );
现在,当使用 Enter 键时会触发该事件。
另外,一个额外的好处是,即使您不想将按钮设为默认按钮,您也可以与按钮共享侦听器。
JButton button = new JButton("Do Something");
button.addActionListener( action );
注意,这个例子使用了一个Action
,它实现了ActionListener
,因为Action
是一个新的API,有更多的特性。例如,您可以禁用 Action
,这将禁用文本字段和按钮的事件。
【讨论】:
同意。在一般情况下,比我的解决方案更优雅。 @camickr 是 Java swings 专家 您也可以在textField.addActionListener()
方法中调用button.doClick();
,而不是同时添加动作。【参考方案7】:
只需使用此代码:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);
【讨论】:
【参考方案8】:首先在 JButton 或 JTextField 上添加动作命令:
JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");
然后将 ActionListener 添加到 JTextField 和 JButton。
JButton.addActionListener(listener);
JTextField.addActionListener(listener);
之后,在你的 ActionListener 实现上写
@Override
public void actionPerformed(ActionEvent e)
String actionCommand = e.getActionCommand();
if(actionCommand.equals("Your actionCommand for JButton") || actionCommand.equals("Your actionCommand for press Enter"))
//Do something
【讨论】:
【参考方案9】:public void keyReleased(KeyEvent e)
int key=e.getKeyCode();
if(e.getSource()==textField)
if(key==KeyEvent.VK_ENTER)
Toolkit.getDefaultToolkit().beep();
textField_1.requestFocusInWindow();
要在JTextField
中为“Enter press”编写逻辑,最好将逻辑保留在keyReleased()
块中,而不是keyTyped()
和keyPressed()
。
【讨论】:
-1 :( 再次重复同样的错误,这在之前的答案中已经被否决,以及相同的指定原因。KeyListeners
的级别太低了@ 987654327@ 的观点。使用旨在与Swing
一起使用的 API :-)【参考方案10】:
为KeyPressed
添加一个事件。
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt)
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
// Enter was pressed. Your code goes here.
【讨论】:
-1 :( KeyListeners 从 Swing 的角度来看太低级了。使用旨在与 Swing 一起使用的 API :-) @nIcEcOw 从 Swing 的角度来看,KeyListeners 的级别太低了:需要引用。 @ᴳᵁᴵᴰᴼ:一个非常有据可查的东西,可以在KeyBindings 的官方教程中找到,虽然在*** 上一个非常好的answer,也涵盖了相同的方面:-) @nIcEcOw 这正是我想到的文档页面。我发现建议优先使用快捷方式和操作的绑定,仅使用侦听器在低级别控制键盘和不要使用,因为它是错误的api之间有很多区别我>。文档页面也不是那么黑白分明。 @ᴳᵁᴵᴰᴼ:KeyListeners
有很多缺点,KeyBindings
更大程度地解决了这些缺点,例如焦点相关、复制/粘贴相关等等。对于琐碎的任务,例如 OP 中所要求的,应避免使用它。以上是关于在 JTextField 中检测回车键的主要内容,如果未能解决你的问题,请参考以下文章