尝试将事件侦听器添加到 JTextField

Trying to add an event listener to a JTextField

我正在尝试添加一个事件侦听器,因此当您在 JTextField 中按回车键时会发生一些事情。到目前为止,我得到了这个

SendingHandler sendingHandler;
...
JTextField draftMessage = new JTextField("field");
draftMessage.addActionListener(sendingHandler);

...

private class SendingHandler implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        System.out.println(command);
    }
}

command 但是永远不会打印出来。这不应该起作用吗?

由于您编辑了问题并说明您使用的是 JTextField,我将重新排列答案:

您看不到任何输出,因为尚未设置操作命令,因此没有任何内容可显示。

尝试在您的 ActionListener 中使用以下内容:

JTextField textField = (JTextField)e.getSource();
System.out.println( textField.getText() );

当然,只有当用户在文本字段中输入内容时,才会显示内容。关键是如果有东西要显示,你只会看到输出。您始终可以通过显示硬编码字符串来验证一段代码是否正在执行。

但是,如果您的问题是关于 JTextArea,那么在 JTextArea 上使用 Enter key 的默认 Action 是在文本区域中插入换行符。

如果你想调用一个动作,那么你需要替换默认的动作:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TextAreaEnter extends JPanel
{
    private JTextArea message = new JTextArea(5, 20);
    private JTextArea display = new JTextArea(5, 20);

    public TextAreaEnter()
    {
        display.setEditable( false );

        add( new JScrollPane(message) );
        add( new JScrollPane(display) );

        Action enter = new AbstractAction()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                display.append( message.getText() + "\n" );
                message.setText("");
            }
        };

        message.getActionMap().put("insert-break", enter);
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("TextAreaEnter");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new TextAreaEnter() );
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}

有关每个 Swing 组件的默认绑定列表,请参阅:Key Bindings

你可以简单地做:

draftMessage.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            //Do your action
        }
});

"actionPerformed" 当您在焦点位于 JTextfield 上时按 Enter 键时执行。