Как использовать Listener для передачи строки в другой класс - PullRequest
2 голосов
/ 03 марта 2012

Я пишу простой браузер, который имеет два класса, SimpleBrowser и MyTabbedPane. SimpleBrowser имеет некоторые компоненты Gui, такие как JButton и TextField, в то время как MyTabbedPane имеет tabbedpane, который имеет JEditorPane. Я хочу передать строку поиска, введенную в SimpleBrowser JTextField, в JEditorPane, который находится в MyTabbedPane я не знаю, как использовать геттер и сеттер Вот часть моего кода

 package com.mysimplebrowser;  

import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import javax.swing.*;  

 class SimpleBrowser extends JFrame{  
    private JTextField myField;  
    private JButton myButton;    
    private JPanel myPanel;  
    private MyTabbedPane myTabbedPane;  

    public SimpleBrowser(){  
        setSize(400, 400);  

        myPanel = new JPanel(); // panel  
        myField = new JTextField();  
        myPanel.add(myField);  

        myButton = new JButton("Search");  
        myButton.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
                // how do i go about here  
              }  
        });  
        myPanel.add(myButton);  
        // i have left out some code  

        add(myPanel);  
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  
    }  

    class MyTabbedPane extends JTabbedPane{  
        private String searchWord;  
        private JEditorPane myEditorPane;  

        public MyTabbedPane(){  
            // i have left some code out  
            myEditorPane = new JEditorPane();  
            // i have left out some code for the HTML kit  

            // i want later to add google Ajax api code or the depreciated  
            // google SOAP jar apis but am stuck on how to pass the String  
            // entered in the class SimpleBrowser JTextField into  
            // MyTabbedPane private String SearchWord  

            String myUrl = "http://localhost/Good" + searchWord + "html";  
            myEditorPane.setPage(myUrl); // left out some try ... catch code  
        }  
    }  

    public static void main(String[] args){  
        SwingUtilities.invokeLater(new Runnable() {  
            public void run() {  
                new SimpleBrowser().setVisible(true);  
            }  
        });  
    }  
}  

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Вы правы - используйте геттеры и сеттеры, и вы также правы в том, что вам не нужно, чтобы ActionListener кнопки SimpleBrowser создавал новый объект MyTabbedPane внутри своего actionPerformed, поскольку ваша программа должна иметь только один объект MyTabbedPane. В моем примере ниже я назвал метод "setter" sendUrlText(...), поскольку именно это он и делает (по-моему, в любом случае). Передача информации между классами не отличается для кода Swing, как для кода без графического интерфейса:

class SimpleBrowser extends JFrame {
   private JTextField myField;
   private JButton myButton;
   private JPanel myPanel;
   private MyTabbedPane myTabbedPane = new MyTabbedPane(this);

   public SimpleBrowser() {
      setSize(400, 400); // should be setting preferredSize!

      myPanel = new JPanel(); // panel
      myField = new JTextField();
      myPanel.add(myField);

      myButton = new JButton("Search");
      myButton.addActionListener(new ActionListener() {

         public void actionPerformed(ActionEvent e) {
            String urlText = myField.getText();
            myTabbedPane.sendUrlText(urlText);
         }
      });
      myPanel.add(myButton);
      // i have left out some code

      add(myPanel);
      setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
   }

   class MyTabbedPane extends JTabbedPane {
      private String searchWord;
      private JEditorPane myEditorPane = new JEditorPane();
      private SimpleBrowser simpleBrowser; // you'll need this later, 
      // if  you separate these two classes -- which you should do.

      public MyTabbedPane(SimpleBrowser simpleBrowser) {
         this.simpleBrowser = simpleBrowser; 
      }

      public void sendUrlText(String urlText) {
         // TODO set editor pane's page here using urlText
         try {
            myEditorPane.setPage(urlText);
         } catch (IOException e) {
            e.printStackTrace();
         }

      }
   }

   private static void createAndShowGui() {
      SimpleBrowserTest mainPanel = new SimpleBrowserTest();

      JFrame frame = new SimpleBrowser();
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
2 голосов
/ 03 марта 2012

Создайте два метода внутри вашего SimpleBrowser класса, например

String searchText = new String();

public void setSearchText(String text)
{
    searchText = text;
}

public String getSearchText()
{
    return searchText;
}

И вызовите этот метод из actionPerformed(...), внутри SimpleBrowser класса, перед созданием объекта класса MyTabbedPane, например setSearchText(myField.getText()).А внутри конструктора MyTabbedPane первая строка будет searchWord = getSearchText();

...