从JPanel对象获取父框架对象

时间:2014-01-06 14:25:27

标签: java swing jframe jpanel netbeans-7

是否可以从JFrame类获取父JPanel个对象
实际上我正在尝试使用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并在SecondPanel类中添加LoginPanel,我可以访问username , password字段,但在这里我无法获取我必须删除的JFrame对象这个组成部分 如果我在ParentJFrameClass中尝试此操作,那么我无法访问username , password字段的值。 (因为这是netbeans提供的结构)
那我现在该怎么办?在这种情况下会有什么解决方案
我希望我已经详细解释了这个问题但是如果有什么不清楚请告诉我 专家请帮忙

1 个答案:

答案 0 :(得分:1)

要使用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;
}