2014-01-06 32 views
0

是否有可能從JPanel類獲得父對象JFrame
其實我試圖做一個使用NetBeans的GUI。GUI有一個框架和兩個面板。
1)登錄面板(具有兩個文本字段和按鈕)
2)第二面板
當JFrame的加載,我在它添加LoginPanel最初。
從JPanel對象獲取父框架對象

public ParentJFrame() { //in constructor 
     initComponents(); 
     this.setLayout(new BorderLayout()); 
     this.setBounds(300,300, 300, 300); 
     this.getContentPane().add(new LoginPanel()); 

    } 

點擊(的LoginPanel)按鈕後,我試圖從JFrame中刪除LoginPanel和添加SecondPanel
現在我正在刪除LoginPanel並在LoginPanel類中添加SecondPanel,我可以訪問username , password字段,但是在這裏我無法獲取必須從中刪除此組件的JFrame對象。
如果我在ParentJFrameClass試試這個,那麼我不可能訪問username , password字段的值。 (因爲這是netbeans提供的結構)
那麼我現在該做什麼?什麼是在這種情況下
我希望我已經詳細解釋了這個問題,但在情況下,如果有什麼不太明白,請讓我知道
高手請幫忙

+1

[SwingUtilities.windowForComponent(..)(http://docs.oracle.com/javase/7/docs/api/javax /swing/SwingUtilities.html#windowForComponent(java.awt.Component)) – nachokk

+0

請問您能否詳細說明.. – Despicable

+0

您應該使用'CardLayout'在[CardLayoutManager]中進行了解更多(http://docs.oracl e.com/javase/tutorial/uiswing/layout/card.html) – nachokk

回答

1

要使用cardlayout面板之間變化,如follwing解決方案代碼可以幫助你,你需要對其進行修改,以滿足您的需要:

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

/** 
* replace the real panel of yours 
* do the right process 
*/ 

public class CardLayoutLoginDemo { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       JFrame frame = new LoginFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
class LoginFrame extends JFrame { 
    public LoginFrame() { 
     super("CardLayout Demo"); 

     //Create the panel that contains the "cards". 
     mainPanel = new JPanel(new CardLayout()); 
     mainPanel.add(getFirstPanel(), FIRST); 
     mainPanel.add(getSecondPanel(), SECOND); 
     this.setContentPane(mainPanel); 
     this.pack(); 
    } 
    //use your first panel 
    private JPanel getFirstPanel() { 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(3,2)); 
     panel.add(new JLabel("Username: ")); 
     panel.add(new JTextField(10)); 
     panel.add(new JLabel("password: ")); 
     panel.add(new JTextField(10)); 
     JButton btnLogin = new JButton("Login"); 
     JButton btnCancel = new JButton("Cancel"); 
     btnLogin.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // TODO Auto-generated method stub 
       CardLayout cl = (CardLayout)(mainPanel.getLayout()); 
       cl.show(mainPanel, SECOND); 
     } 
     }); 
     btnCancel.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     panel.add(btnLogin); 
     panel.add(btnCancel); 
     return panel; 
    } 
    //use the second panel 
    private JPanel getSecondPanel() { 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(2,2)); 
     panel.add(new JLabel("Second panel")); 
     panel.add(new JLabel("other processs")); 
     JButton btnOther = new JButton("Ok"); 
     JButton btnBack = new JButton("Back"); 
     panel.add(btnOther); 
     panel.add(btnBack); 
     btnBack.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       // TODO Auto-generated method stub 
       CardLayout cl = (CardLayout)(mainPanel.getLayout()); 
       cl.show(mainPanel, FIRST); 
      } 
     }); 
     return panel; 
    } 
    private final String FIRST = "First panel"; 
    private final String SECOND = "Second panel"; 
    private static final long serialVersionUID = 1L; 
    private JPanel mainPanel; 
}