2013-02-23 2 views
1

У меня проблема с настройкой текста поля в классе1 на другое поле в классе2. В принципе, у меня есть два класса. В классе1 у меня есть метод, который позволяет пользователю искать слово, которое находится в файле (чтение из файла), а затем, когда слово найдено, я хочу установить его в поле2 класса «1».Как установитьText из класса1 в класс2?

Например, если я ищу «Сан», искомое слово в классе2 должно показать «Сан», а второе слово должно показать «Ая».

Я не знаю, где iam идет не так, и программа не показывает никаких ошибок. Любая помощь будет оценена. Заранее спасибо.

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

Ваши классы нуждаются в методах getter и setter, аналогичных любым классам без Swing. Конструктор класса 2 не должен иметь JOptionPane - мало смысла, поскольку он не создан событием. –

+0

Как применять методы getter и setter? – Ramal

+0

Другая проблема заключается в том, что я не вижу, где вы показываете класс2 в любом месте. Если класс не отображается, имеет смысл, что вы никогда не увидите результаты поиска. –

ответ

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

Пожалуйста, положите в некоторые усилия, чтобы размещать лучше отформатированный код, задавая вопрос здесь.

+0

Hovercraft Full Eels благодарит, что он отлично работает. Спасибо всем. – Ramal

0

class2 был построен перед поиском, вы должны отложить это конкретизация и добавить два аргумента в конструктор, чтобы установить уровень поля с соответствующими значениями.

JOptionPane был показан в конструкторе, если вы хотите использовать 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

Смежные вопросы