2013-08-01 165 views
0

我有問題,關於如何在單擊按鈕時將jxtfield的值從一幀傳遞到第二幀中的jtextfield。將jtextfield值從一個類傳遞到另一個類

下面的示例中,在nett工資文本字段中輸入值後,單擊添加按鈕後,該值將被傳遞到第二個框架的nett工資文本字段。

框架1.我試圖添加actionlistener到我的按鈕來獲取文本,但我如何設置它在第二幀?感謝任何人都可以提供一些建議和幫助。

public class Frame1 extends JFrame{ 
public Frame1() { 

    JPanel guiPanel = new JPanel(new GridBagLayout()); 

    JLabel Nett = new JLabel("Nett Wage: "); 
    final JTextField nettNameTextField = new JTextField(10); 
    JButton addButton = new JButton("Add"); 


    JPanel fields = new JPanel(new GridBagLayout()); 

    GridBagConstraints labelGBC = new GridBagConstraints(); 
    labelGBC.insets = new Insets(10, 3, 3, 3); 
    GridBagConstraints fieldGBC = new GridBagConstraints(); 
    fieldGBC.insets = new Insets(10, 3, 3, 3); 
    GridBagConstraints titleGBC = new GridBagConstraints(); 
    fieldGBC.gridwidth = GridBagConstraints.REMAINDER; 


    fields.add(Nett, labelGBC); 
    fields.add(nettNameTextField, fieldGBC); 


    JPanel buttons = new JPanel(new GridBagLayout()); 

    GridBagConstraints addButtonGBC = new GridBagConstraints(); 
    addButtonGBC.insets = new Insets(40, 3, 3, 3); 
    cancelButtonGBC.gridwidth = GridBagConstraints.REMAINDER; 
    buttons.add(addButton, addButtonGBC); 


    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridwidth = GridBagConstraints.REMAINDER; 
    guiPanel.add(fields, gbc); 
    guiPanel.add(buttons, gbc); 


    add(guiPanel, BorderLayout.CENTER); 

    /*addButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      String value = nettNameTextField.getText(); 

     } 
    });*/ 

第2幀如何設置文本框中的值?

public class Frame2 extends JFrame { 
public Frame2() { 


    JPanel guiPanel = new JPanel(new GridBagLayout()); 


    JLabel nett = new JLabel("Nett Wage: "); 
    JTextField nettNameTextField = new JTextField(10); 


    JPanel fields = new JPanel(new GridBagLayout()); 


    GridBagConstraints labelGBC = new GridBagConstraints(); 
    labelGBC.insets = new Insets(10, 3, 3, 3); 
    GridBagConstraints fieldGBC = new GridBagConstraints(); 
    fieldGBC.insets = new Insets(10, 3, 3, 3); 
    //GridBagConstraints titleGBC = new GridBagConstraints(); 
    fieldGBC.gridwidth = GridBagConstraints.REMAINDER; 




    JPanel savingspanel = new JPanel(new GridBagLayout()); 

    GridBagConstraints totallabelsGBC = new GridBagConstraints(); 
    totallabelsGBC.insets = new Insets(10, 3, 3, 3); 
    GridBagConstraints totalfieldGBC = new GridBagConstraints(); 
    totalfieldGBC.insets = new Insets(10, 3, 3, 3); 
    totalfieldGBC.gridwidth = GridBagConstraints.REMAINDER; 
    savingspanel.add(nett, labelGBC); 
    savingspanel.add(nettNameTextField, fieldGBC); 



    add(guiPanel, BorderLayout.CENTER);      
     }  
}     
} 

回答

0

如果Frame1中

Frame1之前存在式2的一個實例,通過在Frame2一個實例,在任一構造中或在增變方法。

public Frame1(Frame2 frame2) 
{ 
    this.frame2 = frame2; 
} 

然後在Frame2,具有可更新的價值,像updateNetWage的方法。

public void updateNetWage(String value) 
{ 
    nettNameTextField.setText(value); 
} 

在你actionListener功能,您可以直接電話諮詢:

frame2.updateNetWage(value); 

如果式2的實例不可

您可以定義一個參數的構造函數用於Frame2,所以您可以使用其中的值創建一個新對象。

public Frame2(String netNameValue) 
{ 
    nettNameTextField.setText(netNameValue); 
} 
+0

也許他不應該將完整的Frame1引用傳遞給構造函數。我寧願讓實現Frame1的接口使用特殊的get方法,並將此接口傳遞給Frame2構造函數。 – sk2212

+0

如果你只是傳遞接口,你仍然傳遞對象。這是一個很好的觀點,但在我看來,這是一個不必要的擴展,只會使代碼更加複雜,以至於程序員可以在幾秒鐘內使用一種方法。 – christopher

相關問題