2013-10-25 37 views
0

好吧,這裏是我的問題。 B類是一個構建GUI的類,它有一個textField和一個按鈕。 A類有一個B類的實例。現在我在文本框中輸入一些值,當我單擊按鈕時,在A類中,我想打印出我剛纔在文本框中輸入的值,我該如何實現這一點?我怎麼能告訴它有一個GUI構建器類的實例類,當JButton的動作事件進行

下面的代碼可以更好地解釋我想達到的目標:

public class A 
    { 
     B myB = new B(); 

     (when the JButton was clicked, 
     how can I get the new textfield value here?) 
    } 

    public class B 
    { 
     JLabel myLabel; 
     JButton myButton; 

     public B() 
     { 
      getContentPane().setLayout(null); 
      myLabel = new JLabel(); 
      myLabel.setLocation(0,0); 
      myLabel.setSize(100,30); 
      myLabel.setBackground(new Color(-6710887)); 
      myLabel.setText(""); 
      getContentPane().add(myLabel); 

      myButton = new JButton(); 
      myButton.setLocation(0,50); 
      myButton.setSize(100,30); 
      myButton.setBackground(new Color(-16737895)); 
      myButton.setText("Submit"); 
      getContentPane().add(myButton); 

      myButton.addActionListener(this); 

      setSize(400,400); 
      setVisible(true); 
      setResizable(false); 

      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     } 

     public void actionPerformed(ActionEvent e) 
     { 

       (how can I pass this "myLabel.getText()" value to class A when 
       this action performed?) 
     } 
    } 

任何人可以幫助我完成這個小程序?提前致謝!

回答

0

我經常做一個「應用程序」類是結合所有我的GUI構建器構建的組件在一起。任何有價值的GUI構建器都可以讓你將getters添加到生成的源代碼中。爲GUI構建的組件添加一些獲取器以檢索GUI的關鍵元素,然後讓App類根據需要使用獲取器與組件進行交互。這不會贏得任何MVC/MVVM/MVP設計獎項,但它可以完成工作,這應該算是一件好事。

public class App { 
    private B _b; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       App app = new App(); 
       app.run(); 
      } 
     }); 
    } 

    void run() { 
     _b = new B(); 
     _b.getMainButton().addActionListener(new MainButtonListener()); 
     _b.setVisible(true); 
    } 

    private void handleMainButtonClicked() { 
     String mainText = _b.getMainTextArea().getText(); 
     System.out.println("Button clicked; main text = " + mainText); 
    } 

    public class MainButtonListener implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      handleMainButtonClicked(); 
     } 
    } 
} 

public class B extends JFrame { 
    private JPanel _contentPane; 
    private JTextArea _jTextArea; 
    private JButton _jButton; 

    public B() { 
     initComponents(); 
    } 

    private void initComponents() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(400, 400); 
     _contentPane = new JPanel(); 
     setContentPane(_contentPane); 

     _jTextArea = new JTextArea(); 
     _contentPane.add(_jTextArea, BorderLayout.CENTER); 

     _jButton = new JButton("My Button"); 
     _contentPane.add(_jButton, BorderLayout.SOUTH); 
    } 

    public JButton getMainButton() { 
     return _jButton; 
    } 

    public JTextComponent getMainTextArea() { 
     return _jTextArea; 
    } 
} 
3

您需要在B類的方法暴露在文本字段中的值,然後A類可以調用該方法。它實際上聽起來像是A級(或其他)應該是你的按鈕的ActionListener

然而,更大的問題是,你沒有,你只是在B類標籤此代碼是一個很好的理由,爲什麼學習揮杆時,你不應該使用GUI構建器,尤其是文本字段。

一些閱讀: http://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html http://docs.oracle.com/javase/tutorial/uiswing/events/

相關問題