1

class1 のフィールドのテキストを class2 の別のフィールドに設定する際に問題があります。基本的に、私は2つのクラスを持っています。クラス1には、ユーザーがファイル内の単語を検索できるようにするメソッドがあり(ファイルから読み取る)、単語が見つかったら、それをクラス2の「フィールド1」に設定したいと考えています。

たとえば、「さん」を検索すると、class2 で検索された単語には「さん」が表示され、2 番目の単語には「彩」が表示されます。

どこが間違っているのかわからず、プログラムにエラーは表示されません。どんな助けでも大歓迎です。前もって感謝します。

file.txt

San Aya

public class MyFileReader {

    JTextField searchfield = new JTextField(10);
    JPanel panel = new JPanel();

    public MyFileReader() {
        panel.add(new JLabel("Search:"));
        panel.add(searchfield);
        panel.setLayout(new GridLayout(5, 2));
        int result = JOptionPane.showConfirmDialog(null, panel,
                "Search", JOptionPane.YES_NO_OPTION);
        if (result == JOptionPane.YES_OPTION) {
            MyContentManager contentManager = new MyContentManager();
            try {
                String stringSearch = searchfield.getText();
                BufferedReader bf = new BufferedReader(new FileReader("file.txt"));
                int linecount = 0;
                String line;
                ArrayList<String> list = new ArrayList<String>();
                while ((line = bf.readLine()) != null) {
                    list.add(line);
                    linecount++;
                    int indexfound = line.indexOf(stringSearch);
                    if (indexfound > -1) {
                        String[] word = line.split("\t");
                        String firstword = word[0];
                        String secondword = word[1];
                        contentManager.field1.setText(stringSearch);//This is the problem
                        contentManager.field2.setText(secondword);//This is the problem
                    }
                }
                bf.close();
            } catch (IOException e) {
                System.out.println("IO Error Occurred: " + e.toString());
            }
        }
    }

    public static void main(String[] args) {
        new MyFileReader();
    }
}

クラス2

public class MyContentManager {

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

    public MyContentManager() {
        panel.add(new JLabel("Searched For:"));
        panel.add(field1);
        panel.add(new JLabel("Second word:"));
        panel.add(field2);
        panel.setLayout(new GridLayout(5, 2));
        int result = JOptionPane.showConfirmDialog(null, panel,
                "Search found", JOptionPane.YES_NO_OPTION);
    }
}
4

3 に答える 3

4

2 番目のクラスのセッター メソッドを提供し、ゲッター メソッドを介して取得できる JPanel を生成し、それを JOptionPane に表示するだけです (必要な場合)。例えば:

DamClass1.java

class DamClass1 {
   JTextField searchfield = new JTextField(10);
   JPanel panel = new JPanel();

   public DamClass1() {
      panel.add(new JLabel("Search:"));
      panel.add(searchfield);
      panel.setLayout(new GridLayout(5, 2));
      int result = JOptionPane.showConfirmDialog(null, panel, "Search",
            JOptionPane.YES_NO_OPTION);
      if (result == JOptionPane.YES_OPTION) {
         DamClass2 c2 = new DamClass2();
         String stringSearch = searchfield.getText();

         if (stringSearch.equals("Foo")) {
            c2.setField1(stringSearch);
            c2.setField2("Bar");

            int result2 = JOptionPane.showConfirmDialog(panel, c2.getPanel(),
                  "Search found", JOptionPane.YES_NO_OPTION);
         }

         // commented to make the code runnable for me.
         // try {
         // BufferedReader bf = new BufferedReader(new FileReader("file.txt"));
         // int linecount = 0;
         // String line;
         // ArrayList<String> list = new ArrayList<String>();
         // while ((line = bf.readLine()) != null) {
         // list.add(line);
         // linecount++;
         // int indexfound = line.indexOf(stringSearch);
         // if (indexfound > -1) {
         // String[] word = line.split("\t");
         // String firstword = word[0];
         // String secondword = word[1];
         // c2.field1.setText(stringSearch);//This is the problem
         // c2.field2.setText(secondword);//This is the problem
         // }
         // }
         // bf.close();
         // } catch (IOException e) {
         // System.out.println("IO Error Occurred: " + e.toString());
         // }
      }
   }

   public static void main(String[] args) {
      DamClass1 s1 = new DamClass1();
   }
}

DamClass2.java

class DamClass2 {
   private JTextField field1 = new JTextField(10);
   private JTextField field2 = new JTextField(10);
   private JPanel panel = new JPanel();

   public DamClass2() {
      panel.add(new JLabel("Searched For:"));
      panel.add(field1);
      panel.add(new JLabel("Second word:"));
      panel.add(field2);
      panel.setLayout(new GridLayout(5, 2));
   }

   public JPanel getPanel() {
      return panel;
   }

   public void setField1(String text) {
      field1.setText(text);
   }

   public void setField2(String text) {
      field2.setText(text);
   }
}

ここで質問するときは、より適切な形式のコードを投稿するように努力してください。

于 2013-02-23T18:39:17.790 に答える
0

2 番目のクラスを次のように変更する必要があります。

public class MyContentManager {

    public int showFieldsFound(String first, String second) {
        JTextField field1 = new JTextField(10);
        field1.setText(first);
        JTextField field2 = new JTextField(10);
        field2.setText(second)
        JPanel panel = new JPanel();
        panel.add(new JLabel("Searched For:"));
        panel.add(field1);
        panel.add(new JLabel("Second word:"));
        panel.add(field2);
        panel.setLayout(new GridLayout(5, 2));
        return JOptionPane.showConfirmDialog(null, panel,
                "Search found", JOptionPane.YES_NO_OPTION);
    }
}

これは、フィールドを見つけたときにフィールドを表示することを扱います。最初のクラスは次のようにする必要があります。

public class MyFileReader {

    JTextField searchfield = new JTextField(10);
    JPanel panel = new JPanel();

    public MyFileReader() {
        panel.add(new JLabel("Search:"));
        panel.add(searchfield);
        panel.setLayout(new GridLayout(5, 2));
        int result = JOptionPane.showConfirmDialog(null, panel,
                "Search", JOptionPane.YES_NO_OPTION);
        if (result == JOptionPane.YES_OPTION) {
            MyContentManager contentManager = new MyContentManager();
            try {
                String stringSearch = searchfield.getText();
                BufferedReader bf = new BufferedReader(new FileReader("file.txt"));
                int linecount = 0;
                String line;
                ArrayList<String> list = new ArrayList<String>();
                while ((line = bf.readLine()) != null) {
                    list.add(line);
                    linecount++;
                    int indexfound = line.indexOf(stringSearch);
                    if (indexfound > -1) {
                        String[] word = line.split("\t");
                        String firstword = word[0];
                        String secondword = word[1];
                        int resultFromShowing = contentManager.showFieldsFound(stringSearch, secondWord);
                    }
                }
                bf.close();
            } catch (IOException e) {
                System.out.println("IO Error Occurred: " + e.toString());
            }
        }
    }

    public static void main(String[] args) {
        new MyFileReader();
    }
}

単語を表示した結果をどうしたいのかわかりませんが、値を返すように 2 番目のクラスを変更しました。

于 2013-02-23T18:05:26.630 に答える
0

class2 は検索の前に構築されているため、インスタンス化を遅らせ、コンストラクターに 2 つの引数を追加して、フィールドに適切な値を設定する必要があります。

JOptionPane はコンストラクターに表示されました。コメントどおりにセッターを使用する場合は、ダイアログをこのセッターに移動する必要があります。

于 2013-02-23T17:57:34.430 に答える