Java 从JPanel对象获取父帧对象

Java 从JPanel对象获取父帧对象,java,swing,jframe,jpanel,netbeans-7,Java,Swing,Jframe,Jpanel,Netbeans 7,是否可以从JPanel类获取父JFrame对象??? 实际上,我正在尝试使用NetBeans制作GUI。GUI有一个框架和两个面板。 1)登录面板(有两个文本字段和按钮) 2)第二个面板 加载JFrame时,我首先在其中添加LoginPanel。 public ParentJFrame() { //in constructor initComponents(); this.setLayout(new BorderLayout()); this

是否可以从
JPanel
类获取父
JFrame
对象???

实际上,我正在尝试使用NetBeans制作GUI。GUI有一个框架和两个面板。
1)登录面板(有两个文本字段和按钮)
2)第二个面板
加载JFrame时,我首先在其中添加
LoginPanel

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
,在该类中,我可以访问
用户名、密码
字段,但在这里,我无法获取必须从中删除此组件的JFrame对象。
如果在
ParentJFrameClass
中尝试此操作,则无法访问
username,password
字段的值(因为这是netbeans提供的结构)
那我现在该怎么办?这种情况下的解决方案是什么
我希望我已经详细解释了问题,但如果有什么不清楚的地方,请告诉我

专家请帮助

使用cardlayout在面板之间进行更改,如以下代码可能会帮助您,您需要修改它以满足您的需要:

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

请详细说明。您应该使用
CardLayout
阅读更多关于
CardLayout
如何在此场景中发挥作用的信息。CardLayout是一个建议,请阅读本教程,您可以在不“删除”的情况下切换panel1和panel2,至于您对
windowForCOmponent
的问题,您将获得所需的
jframe
对象。然后必须向下转换到netbeans jframe创建(ParentJFrameClass)。