当我尝试运行此Java程序来创建JTextField时:
import java.awt.*;
import javax.swing.*;
public class TextField1 extends JFrame{
private final int WIDTH = 320;
private final int HEIGHT = 250;
private FlowLayout flow = new FlowLayout();
private JTextField myOutput = new JTextField();
public TextField1() {
super("My TextField Example");
setSize(WIDTH, HEIGHT);
setLayout(flow);
JTextField myOutput = new JTextField(20);
add(myOutput);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void createGUI(){
myOutput.setText("I am a text field showing output!");
myOutput.setEditable(false);
}
public static void main(String[]args) {
TextField1 myTextField = new TextField1();
myTextField.createGUI();
System.out.println(myTextField.myOutput.getText());
}
}
好像它没有注册createGUI()方法。你能解释一下这是为什么吗?
答案 0 :(得分:5)
在构造函数中,您正在创建一个名为myOutput
的新变量,该变量与上面声明的实例变量不同。 JTextField myOutput
应为myOutput
编辑:
您声明方法 - 本地变量myOutput
并将其添加到您的框架中。 createGUI()
使用在类顶部声明的实例变量,因此它不会影响框架中的TextField
。
答案 1 :(得分:0)
我只是扩展了blueygh2提供的答案。主要问题是: 你没有给出类中JTextField的大小,默认为0
private JTextField myOutput = new JTextField();//no size specified
同样在构造函数中,您将声明另一个具有相同名称的JTextField,该对象在创建对象后有资格进行垃圾收集:
JTextField myOutput = new JTextField(20);
现在有两种解决方案:
1>在类定义中指定JTextField的大小,如:
JTextField myOutput = new JTextField(20); // new object created for JTextField
2 - ;不要在构造函数中创建新的JTextField对象,如:
myOutput = new JTextField(20);