Переменная JTextField возвращает нуль за пределами actionlistener? - PullRequest
2 голосов
/ 21 августа 2011

Я делаю программу, которая добавляет и форматирует файлы. У меня действительно много классов, но для целей этого вопроса, скажем, у меня есть два, guidialog и guimain.

В guidialog у меня есть JTextField и список действий для него. Вот список действий:

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 как «ноль». Я не могу понять это.

1 Ответ

2 голосов
/ 21 августа 2011

Это потому, что в 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 из диалогового окна пользователю:

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();
    }
});

Примечания:

  • вы не должны использовать открытые поля. Используйте методы получения.
  • классы должны начинаться с заглавной буквы и записываться в CamelCase: GuiMain.
...