我正在尝试添加一个事件监听器,所以当您在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
从未打印出来。这应该不起作用吗?
答案 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键执行。