2013-02-23 66 views
1

我有一个问题,将class1中的字段文本设置为class2中的另一个字段。基本上,我有两个班。在class1中,我有一种方法允许用户搜索文件中的单词(从文件中读取),然后当找到单词时,我想将它设置为class2“field1”。如何将文本从class1设置为class2?

例如,如果我搜索“San”,在class2中搜索到的单词应显示“San”,而第二个单词应显示“Aya”。

我不知道哪里出错了,程序没有显示任何错误。任何帮助将不胜感激。提前致谢。

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

类class2

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); 
    } 
} 
+0

您的类需要类似于任何非Swing类的getter和setter方法。 class2的构造函数不应该有一个JOptionPane - 没有什么意义,因为它不是事件创建的。 – 2013-02-23 17:50:14

+0

如何应用getter和setter方法? – Ramal 2013-02-23 17:56:48

+0

你的其他问题是我没有看到你在哪里显示class2。如果课程没有显示,那么您永远不会看到搜索结果。 – 2013-02-23 18:31:07

回答

4

我会给你的第二类setter方法,让它产生一个可以通过getter方法获得的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); 
    } 
} 

请花心思后更好的格式化代码在这里问问题的时候。

+0

气垫船鳗鱼感谢它完美的工作。感谢其他人。 – Ramal 2013-02-24 12:29:20

0

Class2中被搜索之前建造的,你不得不推迟它的实例,并在其构造函数来设置添加两个参数具有适当值的字段。

JOptionPane显示在构造函数中,如果你想使用settter作为注释,你必须将对话框移动到这个setter。

0

你需要第二类更改为一些喜欢:

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

不知道你想要的东西从显示的话,结果做的,但我已经改变了第二类返回值。

+0

bmorris591当我点击是的时,第二类的两个字段仍然是空的。 – Ramal 2013-02-23 18:22:53

相关问题