2013-02-23 2 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(); 
    } 
} 

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

클래스에는 스윙 이외의 클래스와 비슷한 getter 및 setter 메서드가 필요합니다. class2 생성자에는 JOptionPane이 없어야합니다. 이벤트가 생성되지 않기 때문에 의미가 없습니다. –

+0

getter 및 setter 메소드를 적용하는 방법은 무엇입니까? – Ramal

+0

다른 문제는 어디서나 class2를 표시하는 위치가 표시되지 않는다는 것입니다. 클래스가 표시되지 않으면 검색 결과가 표시되지 않습니다. –

답변

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

Hovercraft Eels의 전체가 완벽하게 작동하여 덕분입니다. 다른 사람들 덕분에. – Ramal

0

Class2의 검색 전에 지어진 Class2의, 당신은 인스턴스의 지연과를 설정하는 생성자에 두 개의 인수를 추가해야 적절한 값을 가진 필드.

JOptionPane이 생성자에 표시되었으므로 settter를 주석으로 사용하려면 대화 상자를이 설정자로 이동해야합니다.

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

관련 문제