为什么我不能调用创建对象的公共方法?

时间:2014-03-13 16:22:42

标签: java jtextfield

当我尝试运行此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()方法。你能解释一下这是为什么吗?

2 个答案:

答案 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);