尝试将事件侦听器添加到 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 键时执行。
我正在尝试添加一个事件侦听器,因此当您在 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 键时执行。