gpt4 book ai didi

java - JTextField 变量在 actionlistener 之外返回 null?

转载 作者:行者123 更新时间:2023-11-30 09:46:27 24 4
gpt4 key购买 nike

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

在 guidialog 中,我有一个 JTextField 和一个 actionlistener。这是 Action 列表器:

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”。我想不通。

最佳答案

那是因为在 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();
}
});

旁注:

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

关于java - JTextField 变量在 actionlistener 之外返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7139422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com