2

Iamは、ユーザーが名前と説明を入力する簡単なプログラムを作成しています。ユーザーが[OK]を押すと、プログラムは結果をファイルに書き込みます。基本的に3つのクラスがあります。class1からclass2を呼び出して、メソッドを実装したいと思います。私は1つのクラスでそれを行う方法を知っていますが、私もこの方法を知りたいです。前もって感謝します。

問題は、入力をファイルに追加できないことです。たぶん、iamはファイル名を正しく呼び出していません:

   if (result == JOptionPane.OK_OPTION){

class2 ad = new class2(this);
   }

以下は私の3つのクラスです。

主要

public class mainclass {
    public static void main(String[] args) {
        class1 a = new class1();
    }
}

クラス1

import javax.swing.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.table.*;
import java.util.*;

public class class1{

final JTextField field1 = new JTextField(10);
final JTextField field2 = new JTextField(10);
JPanel panel = new JPanel();

public  class1() {

        panel.add(new JLabel("Name:"));
        panel.add(field1);
        panel.setLayout(new GridLayout(5,2));
        panel.add(new JLabel("Description:"));
        panel.add(field2);

        int result = JOptionPane.showConfirmDialog(null, panel,"Enter Information", JOptionPane.OK_CANCEL_OPTION);

        if (result == JOptionPane.OK_OPTION) {
            class2 ad = new class2 ();
        }
    }
}

クラス2

import javax.swing.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.table.*;
import java.util.*;

 public class class2 {

    class1 a;

    public class2(class1 a) {

        this.a = a;

        a = new class1();

        BufferedWriter writer = null;

        try {

            writer = new BufferedWriter( new FileWriter("file.txt", true));

            String add1 = a.field1.getText();
            String add2 = a.field2.getText();

            writer.write(add1);
            writer.write("\t");
            writer.write(add2);
            writer.write("\t");

        } catch ( IOException e) {

        } finally {
            try {
            if ( writer != null)
                writer.close( );
            } catch ( IOException e) {
            }
        }       
    }
}
4

2 に答える 2

2

の行a = new class1()は、でclass2作成されたものとは異なるインスタンスを作成しmainclassます。代わりに、コンストラクターへの参照を渡しclass1ます。class2

if (result == JOptionPane.OK_OPTION) {
    class2 ad = new class2(this);
}
...
public class2(class1 a) {
    //a = new class1();
    this.a = a;
    ...
}
于 2013-02-20T18:02:03.767 に答える
2

これは問題です。

のコンストラクタは、次class1のインスタンスを作成しますclass2

class2 ad = new class2();

これはのコンストラクターを呼び出しますclass2

ここでインスタンスを作成しますclass1

a = new class1();

これはのコンストラクターを呼び出しますclass1

もう一度プロンプトが表示されます。

したがってclass2、2番目のプロンプトの後のコンストラクターの残りの部分にのみ到達します(キャンセルした場合)。

于 2013-02-20T18:02:11.483 に答える