很遗憾,我关于SO的第一个问题是如此愚蠢,但我无法绕过这件事。
经过数小时的"蒸馏",我将问题简化为:
使用Netbeans,我制作了一个JFrame,并在其中放置了一个Jbutton1和一个JTextField(名为sinonimo)。这个想法是使用文本字段来获取用户输入。所以我像这样设置按钮的onClick操作
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
System.out.println(sinonimo.getText());
}
问题是:我可以在文本字段中键入任何内容,getText() 方法将仅返回在 Netbeans 的"text"属性中设置的字符串,它永远不会更改。
我是否错过了关于Java的重要内容? 有人能指出我正确的方向吗?
编辑:在复制完整代码时,我发现了问题:在框架的构造函数中,initComponents() 被调用了两次,生成了另一个无法从 MouseClicked 事件访问的文本字段副本(我认为)。现在一切似乎都很好,谢谢你们的照明响应!
使用 JTextField,如果调用 getText(),如果索引超出范围或文档为 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 实例未正确添加并且无法正常运行。