109

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

4

10 回答 10

179

AJTextField被设计为ActionListener像 a 一样使用 a JButton。见addActionListener()方法JTextField

例如:

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

于 2010-12-12T03:36:32.083 回答
25
JTextField function=new JTextField(8);   
function.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent e){

                        //statements!!!

                }});

您需要做的就是将ActionListener 添加到上面的JTextField 中!在你按下Enter动作后会执行你想要的语句!

于 2012-05-29T06:21:06.210 回答
19

为 .添加事件KeyPressed

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
  if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
      // Enter was pressed. Your code goes here.
   }
} 
于 2013-01-08T08:15:32.573 回答
10

你想做这样的事情吗?

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

    });
于 2017-05-23T05:36:29.557 回答
1

其他答案(包括接受的答案)都很好,但如果您已经使用 Java8,则可以执行以下操作(以更短、更新的方式):

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

正如公认的答案所说,您可以简单地用一个ActionListener捕获 Enter-Key 的 做出反应。

但是,我的方法利用了 Java 8 中引入的函数概念。

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

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

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

如果需要进一步解释,请告诉我!

于 2017-08-21T21:16:43.370 回答
0

首先通过以下方式在 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
    }
}
于 2014-08-05T21:58:33.257 回答
-1

如果要在 JTextField 输入中设置默认按钮操作,则必须执行以下操作:

//put this after initComponents();

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

它是 [0] 因为一个按钮可以有很多动作,但通常只有一个(ActionPerformed)。

于 2015-10-24T05:19:21.617 回答
-1

对于框架中的每个文本字段,调用 addKeyListener 方法。然后实现并覆盖 keyPressed 方法,正如其他人所指出的那样。现在,您可以从框架中的任何字段按 Enter 键来激活您的操作。

@Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ENTER){
                //perform action
            }
        }
于 2020-08-04T20:30:46.763 回答
-3
public void keyReleased(KeyEvent e)
{
    int key=e.getKeyCode();
    if(e.getSource()==textField)
    {
        if(key==KeyEvent.VK_ENTER)
        { 
            Toolkit.getDefaultToolkit().beep();
            textField_1.requestFocusInWindow();                     
        }
    }

要为 'Enter press' 编写逻辑,JTextField最好将逻辑保留在keyReleased()块内而不是keyTyped()& keyPressed()

于 2013-05-01T12:52:24.667 回答
-3

只需使用以下代码:

SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);
于 2015-03-14T15:55:57.820 回答