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

时间:2015-04-09 15:15:46

标签: java swing jframe

我正在尝试添加一个事件监听器,所以当您在JTextField中按Enter键时会发生一些事情。到目前为止我已经有了这个

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从未打印出来。这应该不起作用吗?

2 个答案:

答案 0 :(得分:4)

由于您编辑了问题并澄清您正在使用JTextField,我将重新排序答案:

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

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

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

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

但是,如果您对JTextArea提出疑问,那么在Action上使用Enter key的默认JTextArea就是在文本区域中插入换行符。

如果要调用操作,则需要替换默认操作:

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

答案 1 :(得分:0)

您可以这样做:

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

"的actionPerformed"当您将焦点放在JTextfield上时按Enter键执行。