java为什么我不能调用已创建对象的公共方法?
当我试图运行此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()方法。你能解释一下为什么会这样吗
# 1 楼答案
在构造函数中,您正在创建一个名为
myOutput
的新变量,它与上面声明的实例变量不同JTextField myOutput
应该是myOutput
编辑:
声明一个方法局部变量
myOutput
,并将其添加到框架中createGUI()
使用类顶部声明的实例变量,因此它不会影响帧中的TextField
# 2 楼答案
我只是扩展了blueygh2提供的答案。主要问题是:
您尚未给出类中JTextField的大小,默认情况下该字段为0
此外,在构造函数中,您正在声明另一个同名的JTextField,该字段在对象创建后将有资格进行垃圾收集:
现在有两种解决方案:
1>;在类定义中指定JTextField的大小,如下所示:
2>;不要在构造函数中创建新的JTextField对象,如: