有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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()方法。你能解释一下为什么会这样吗


共 (2) 个答案

  1. # 1 楼答案

    在构造函数中,您正在创建一个名为myOutput的新变量,它与上面声明的实例变量不同JTextField myOutput应该是myOutput

    编辑:

    声明一个方法局部变量myOutput,并将其添加到框架中createGUI()使用类顶部声明的实例变量,因此它不会影响帧中的TextField

  2. # 2 楼答案

    我只是扩展了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);