JTextField变量在actionlistener之外返回null?

时间:2011-08-21 16:10:31

标签: java class variables jtextfield

我正在制作一个添加和格式化文件的程序。我实际上有很多课程,但为了这个问题的目的,让我说我有两个,guidialog和guimain。

在guidialog中,我有一个JTextField和一个actionlistener。这是actionlistner:

public void actionPerformed(ActionEvent event) {
            blockName=textFieldBlockName.getText();
            System.out.println("Made new block: "+blockName);
            canClose=true;

            guimain blockAddWrite = new guimain();
            blockAddWrite.addNewBlockFile();
        }
    });

public String blockName;

现在在guimain我有一个格式化程序,它根据文本字段中给出的名称写入文件:

   public void addNewBlockFile() {
      blockdialog blockName = new blockdialog();

      try {
         newBlock = new Formatter("Block" + blockName.blockName + ".java");
         System.out.println("Created File: Block" + blockName.blockName);
      } catch (Exception e) {
         System.out.println("ERROR: Could Not Output Block File");
      }
   }

我编辑并关闭文件,但没有必要。但是当我尝试这个时,guimain中引用blockName的所有东西都输出为“null”。我无法弄清楚。

1 个答案:

答案 0 :(得分:2)

那是因为在guimain中,你没有使用用户输入内容的对话框的blockName字段:你正在使用另一个新构造的对话框的blockName字段:

public void addNewBlockFile() {
    blockdialog blockName = new blockdialog();
    ^--- the dialog is not the one where the user entered something. It's a new one.

您应该将blockName从对话框传递给guimain:

public void actionPerformed(ActionEvent event) {
        blockName=textFieldBlockName.getText();
        System.out.println("Made new block: "+blockName);
        canClose=true;

        guimain blockAddWrite = new guimain(blockName); // we construct a guimain instance with the entered text
        blockAddWrite.addNewBlockFile();
    }
});

附注:

  • 您不应使用公共字段。使用getter方法。
  • 类应以大写字母开头,并拼写为CamelCase:GuiMain。