从JTextField获取输入并将其放入if / else语句

时间:2015-01-29 18:26:47

标签: java swing

我一直致力于从JFrame中的文本字段中获取文本的程序。这是获取文本的代码:

JTextField textField = new JTextField(a3);

String text = textField.getText();

    if (text.equals("hi")){
        textArea.setText("Hey!");
    }`

当我运行代码时,一切正常,JFrame出现了。但是当我更改文本然后按回车键时,它什么也没做。我需要使用ActionListener吗?

4 个答案:

答案 0 :(得分:1)

代码按顺序执行。上面的代码意味着:

  • 创建一个JTextField
  • 立即获取其文本(空字符串)
  • 立即将其文字与" hi"。
  • 进行比较

您想要的是在某些GUI发生时重新执行此测试。例如,当用户单击按钮时,或者当用户在文本字段中按Enter键时。因此,您需要将事件监听器附加到按钮(或文本字段)以告知Swing:当单击按钮时(或者在字段中按下enter时),我希望这段代码是执行。

有关详细信息,请参阅Swing tutorial about events

答案 1 :(得分:1)

您需要设置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!");
        }
    }
});

请注意,文本字段和区域必须是最终的(如果它们是局部变量),以便在侦听器中使用它们,因为它是一个匿名类。

答案 2 :(得分:0)

您必须为textfield设置一个监听器,并在监听器内检查您的代码。

答案 3 :(得分:0)

在创建文本字段后立即执行if条件检查文本区域中执行的代码。然后在程序运行几秒后更改文本字段,并且没有执行的代码再次检查文本字段。这根本不起作用。

代码逐行执行,一次执行一次。代码不会神奇地意识到程序中正在发生变化的事情,除非你告诉它,否则它无法阻止并等待某些事情发生。不幸的是,您不能简单地在代码中的这一行暂停,否则您的程序将停止响应。

您需要一种方法让您的程序不断检查文本字段的值。最简单的方法是使用actionListener对象,该对象将订阅文本字段,并在文本字段发生时自动调用。