从 JTextField 获取输入并将其放入 if/else 语句
Getting input from a JTextField and putting it into an if/else statement
我一直在开发一个从 JFrame 中的文本字段获取文本的程序。这是获取文本的代码:
JTextField textField = new JTextField(a3);
String text = textField.getText();
if (text.equals("hi")){
textArea.setText("Hey!");
}`
当我 运行 代码时,一切正常,JFrame 出现。但是当我更改文本然后按回车键时,它什么也不做。我需要使用 ActionListener 吗?
您必须为文本字段设置一个侦听器,并在侦听器内部检查您的代码。
代码按顺序执行。上面代码的意思是:
- 创建一个 JTextField
- 立即获取其文本(空字符串)
- 立即将其文本与 "hi" 进行比较。
您想要的是在出现某些 GUI 时重新执行此测试。例如,当用户单击按钮时,或者当用户在文本字段中按下回车键时。因此,您需要将事件侦听器附加到按钮(或文本字段)以告诉 Swing:单击按钮时(或在字段中按下 enter 时),我希望执行这段代码。
有关详细信息,请参阅 Swing tutorial about events。
您需要设置一个actionListener。这将响应 Enter 按键并调用侦听器。 The Java Tutorials > How to use Text Fields
中记录了整个过程以及监听器是什么
JPanel panel = new JPanel();
final JTextField textField = new JTextField(20);
final JTextArea textArea = new JTextArea(2,20);
panel.add(textField);
panel.add(textArea);
frame.getContentPane().add(panel);
textField.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
String text = textField.getText();
if (text.equals("hi")) {
textArea.setText("Hey!");
}
}
});
请注意,文本字段和区域必须是最终的(如果它们是局部变量)以便在侦听器中使用它们,如果您像这样创建它,因为它是匿名的 class。
您在 if 条件中执行的用于检查文本区域的代码会在创建文本字段后立即执行。然后,在你的程序有 运行 几秒钟后,你更改了文本字段,并且没有正在执行的代码再次检查文本字段。这根本行不通。
代码逐行执行,一次一个。代码不会神奇地意识到程序中发生的变化,除非您告诉它,否则它无法停止并等待某些事情发生。不幸的是,您不能简单地在代码的这一行暂停,否则您的程序将停止响应。
您的程序需要一种方法来持续检查文本字段的值。最简单的方法是使用 actionListener 对象,该对象将订阅文本字段并在发生某些事情时由文本字段自动调用。
我一直在开发一个从 JFrame 中的文本字段获取文本的程序。这是获取文本的代码:
JTextField textField = new JTextField(a3);
String text = textField.getText();
if (text.equals("hi")){
textArea.setText("Hey!");
}`
当我 运行 代码时,一切正常,JFrame 出现。但是当我更改文本然后按回车键时,它什么也不做。我需要使用 ActionListener 吗?
您必须为文本字段设置一个侦听器,并在侦听器内部检查您的代码。
代码按顺序执行。上面代码的意思是:
- 创建一个 JTextField
- 立即获取其文本(空字符串)
- 立即将其文本与 "hi" 进行比较。
您想要的是在出现某些 GUI 时重新执行此测试。例如,当用户单击按钮时,或者当用户在文本字段中按下回车键时。因此,您需要将事件侦听器附加到按钮(或文本字段)以告诉 Swing:单击按钮时(或在字段中按下 enter 时),我希望执行这段代码。
有关详细信息,请参阅 Swing tutorial about events。
您需要设置一个actionListener。这将响应 Enter 按键并调用侦听器。 The Java Tutorials > How to use Text Fields
中记录了整个过程以及监听器是什么JPanel panel = new JPanel();
final JTextField textField = new JTextField(20);
final JTextArea textArea = new JTextArea(2,20);
panel.add(textField);
panel.add(textArea);
frame.getContentPane().add(panel);
textField.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
String text = textField.getText();
if (text.equals("hi")) {
textArea.setText("Hey!");
}
}
});
请注意,文本字段和区域必须是最终的(如果它们是局部变量)以便在侦听器中使用它们,如果您像这样创建它,因为它是匿名的 class。
您在 if 条件中执行的用于检查文本区域的代码会在创建文本字段后立即执行。然后,在你的程序有 运行 几秒钟后,你更改了文本字段,并且没有正在执行的代码再次检查文本字段。这根本行不通。
代码逐行执行,一次一个。代码不会神奇地意识到程序中发生的变化,除非您告诉它,否则它无法停止并等待某些事情发生。不幸的是,您不能简单地在代码的这一行暂停,否则您的程序将停止响应。
您的程序需要一种方法来持续检查文本字段的值。最简单的方法是使用 actionListener 对象,该对象将订阅文本字段并在发生某些事情时由文本字段自动调用。