Как очистить переменные из JTextFields без закрытия всей программы? - PullRequest
1 голос
/ 16 мая 2011

Я создал текстовый файл для хранения некоторых переменных, которые взяты из текстовых полей. Но для того, чтобы отправить новые переменные в этот текстовый файл, мне нужно закрыть свою программу и снова открыть ее. Команда dispose(); закрывает JFrame, возвращая меня в главное меню, но после повторного открытия меню и отправки других значений значения из предыдущего времени были повторно отправлены. Есть ли простой способ исправить это?

Вот моя запись в .txt код:

public class writeto {

static String data = AddProperty.inputdata;
BufferedWriter out;

public writeto(){
        try{
            out = new BufferedWriter(new FileWriter("writeto.txt", true));

            out.write(data);

            out.newLine();

            out.close();

        }catch(IOException e){

            System.out.println("you have an error" + e);
        }
    }
}

и где метод вызывается в моем addproperty классе

        submitproperty.addActionListener(new ActionListener()
        {

        public void actionPerformed(ActionEvent e)
            {
              housenumber1 = houseNumber.getText();
              streetname1 = streetName.getText();
              town1 = town.getText();
              postcode1 = postcode.getText();
              beds1 = beds.getText();
              price1 = price.getText();
              type1 = type.getText();

            inputdata = housenumber1 + " " + streetname1 + " " + town1 + " " + 

            postcode1 +" " + beds1 + " " + price1 + " " + type1;

             writeto write = new writeto();
             dispose();
            }
       });
    }

Ответы [ 2 ]

3 голосов
/ 16 мая 2011

Из вашего меню вы всегда должны создавать новый JFrame с новыми виджетами (такими как текстовые поля). Текстовое поле new не имеет содержимого, если вы снова отобразите текстовое поле, оно все равно будет отображать его предыдущее содержимое.


Дополнительные замечания:

  • Пожалуйста, используйте стандартные соглашения об именах - не только когда вы показываете код другим. В вашем случае: имена классов должны начинаться с заглавной буквы, предпочтительна верблюжья нотация (writeto -> WriteTo)
  • Класс writeto злоупотребляет конструктором. Код в вашем конструкторе не создает writeto объект, но сбрасывает некоторые строки в файл. Поместите этот код в метод, а не в конструктор.
  • BufferedWriter не будет закрыт, если произойдет исключение. Посмотрите вокруг на stackoverflow, многие вопросы / ответы показывают правильный шаблон io-closeing
  • утилизация jframe - это риск - код выполняется после нажатия кнопки (правильно?) Внутри метода для кнопки, отображаемой в кадре (правильно?). В этом случае кнопка может быть расположена, пока метод объекта кнопки все еще выполняется. Попробуйте setVisible(false), если вы просто хотите скрыть JFrame (например, «закрыть диалоговое окно»)
2 голосов
/ 16 мая 2011

Вы получите большую пользу от использования базы данных, а не текстового файла.Кроме того, ваш вопрос отражает фундаментальное отсутствие знаний не только о Swing, но и об основных функциях CRUD (создание, чтение, обновление, удаление).

Чтобы ответить на ваш вопрос, вы можете очистить текстовое поле с помощью textField1.setText ("");

Я бы прочитал об использовании базы данных для хранения данных.Это сделает вашу жизнь намного проще.

...