0

很遗憾,我关于 SO 的第一个问题是如此愚蠢,但我无法解决这个问题。

经过数小时的“蒸馏”后,我将问题简化为:

我使用 Netbeans 制作了一个 JFrame,并在其中放入了一个 Jbutton1 和一个 JTextField(名为 sinonimo)。这个想法是使用文本字段来获取用户输入。所以我像这样设置按钮的onClick动作

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      

    System.out.println(sinonimo.getText());

}                  

问题是:我可以在文本字段中输入任何内容,getText() 方法将只返回在 Netbeans 的“文本”属性中设置的字符串,它永远不会改变。

我是否错过了有关 java 的一些重要信息?有人能指出我正确的方向吗?

编辑:在复制完整代码时,我发现了问题:在框架的构造函数中,initComponents() 被调用了两次,生成了另一个无法从 MouseClicked 事件中访问的文本字段副本(我认为)。现在一切似乎都很好,谢谢你们的照明反应!

4

1 回答 1

1

使用 JTextField,如果您调用 getText(),如果索引超出范围或 Document 为 null,它将返回 null。如果您可以发布更多代码,我可以进一步帮助解决这个问题。使用以下代码,这可以很好地工作。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test {

    public static void main(final String[] args) {
        final JFrame frame = new JFrame();
        final JButton button = new JButton("Print");
        final JTextField field = new JTextField();
        frame.setLayout(new BorderLayout());
        frame.add(button, BorderLayout.NORTH);
        frame.add(field, BorderLayout.SOUTH);
        frame.setVisible(true);
        frame.pack();
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(field.getText());
            }
        });
    }

}

据我所知,在您发布更多代码之前,您打印它的方法没有被使用,文档返回 null 或者 sinonimo 实例没有正确添加并且没有按应有的方式运行。

于 2013-01-28T19:31:21.237 回答