检测 JTextField 中的输入按钮

在 Java 中输入 JTextField 时,是否可以检测到有人按了 Enter?无需创建按钮并将其设置为默认值。

264517 次浏览

JTextField被设计成像 JButton一样使用 ActionListener。参见 JTextFieldaddActionListener()方法。

例如:

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,它将同时禁用文本字段和按钮的事件。

JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){


public void actionPerformed(ActionEvent e){


//statements!!!


}});

您所需要做的就是像上面那样将 addActionListener 添加到 JTextField!按下 Enter后,该操作将在语句中执行您想要的操作!

KeyPressed添加事件。

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
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()块内。

通过以下方法在 JButton 或 JTextField 上首先添加 action 命令:

JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");

Then add ActionListener to both JTextField and 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
}
}

用这个代码:

SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);

如果要在 JTextField 输入中设置默认按钮操作,必须这样做:

//put this after initComponents();


textField.addActionListener(button.getActionListeners()[0]);

之所以是[0] ,是因为一个按钮可以有很多操作,但通常只有一个操作(ActionPerform)。

Do you want to do something like this ?

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();
}
}


});

其他的答案(包括已被接受的答案)都不错,但是如果您已经使用了 Java8,那么您可以执行以下操作(以一种更短、更新的方式) :

textField.addActionListener(
ae -> {
//dostuff
}
);

As the accepted answer told, you can simply react with an ActionListener, which catches the Enter-Key.

然而,我的方法利用了 Java8中引入的函数概念。

如果希望对按钮和 JTextField 使用相同的操作,可以执行以下操作:

ActionListener l = ae -> {
//do stuff
}


button.addActionListener(l);
textField.addActionListener(l);

If further explaination is needed, please let me know!

对于框架中的每个文本字段,调用 addKeyListener 方法。然后实现并重写 keyPress 方法,正如其他人指出的那样。现在你可以按回车从任何领域在您的框架,以激活您的行动。

@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
//perform action
}
}