【问题标题】:JTextField variable returns null outside of actionlistener?JTextField 变量在 actionlistener 之外返回 null 吗?
【发布时间】:2011-08-21 16:10:31
【问题描述】:

我正在制作一个添加和格式化文件的程序。我实际上有很多课程,但就这个问题而言,假设我有两个课程,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”。我想不通。

【问题讨论】:

  • 从约定的角度来看,类应该命名为 FooBar,而不是 foobar。 actionPerformed(ActionEvent) 方法是否被调用过?
  • 这一行是否显示对话框并等待它关闭? blockdialog blockName = new blockdialog();
  • 请编辑问题,解释按顺序发生的事情以及您预计会发生什么。

标签: java class variables jtextfield


【解决方案1】:

这是因为在 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 拼写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多