1

テキストフィールドから取得したいくつかの変数を格納するテキストファイルを作成しました。ただし、このテキストファイルに新しい変数を送信するには、プログラムを閉じてから再度開く必要があります。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();
            }
       });
    }
4

2 に答える 2

3

メニューから、常に新しいウィジェット(テキストフィールドなど)を使用して新しいJFrameを作成する必要があります。新しいテキストフィールドにはコンテンツがありません。テキストフィールド再度表示すると、以前のコンテンツが引き続き表示されます。


追記:

  • 他の人にコードを表示するときだけでなく、標準の命名規則を使用してください。あなたの場合:クラス名は大文字で始まる必要があり、キャメルケース表記が推奨されます(writeto -> WriteTo
  • writetoクラスはコンストラクターを悪用します。コンストラクターのコードはオブジェクトを作成しませんwritetoが、いくつかの文字列をファイルにダンプします。この種のコードは、コンストラクターではなく、メソッドに配置します。
  • 例外が発生したBufferedWriter場合、は閉じられません。スタックオーバーフローを見てください。多くの質問/回答が正しいio-closeingパターンを示しています
  • jframeを破棄するのはリスクです。コードは、フレームに表示されているボタンのメソッド内で(正しい?)、ボタンを押した後に実行されます(正しい?)。その場合、ボタンオブジェクトのメソッドがまだ実行されている間にボタンが破棄される可能性がありますsetVisible(false)。JFrameを非表示にするだけの場合は試してください(「ダイアログを閉じる」など)。
于 2011-05-16T13:33:14.030 に答える
2

テキストファイルではなくデータベースを使用すると、大きなメリットがあります。さらに、あなたの質問は、Swingだけでなく、基本的なCRUD(作成、読み取り、更新、削除)機能に関する基本的な知識の欠如を示しています。

質問に答えるには、textField1.setText( "");を使用してテキストフィールドをクリアします。

私はデータを保存するためにデータベースを使用することについて読みました。それはあなたの生活をはるかに楽にします。

于 2011-05-16T13:32:01.590 に答える