Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

problem in nested Jpanel over Jframe

I have a JFrame and a Jpanel over that in which various buttons are placed.so on click of a button I have called a new class which is also having containers placed in a Jpanel.so I want to show that new class panel over the main Jframe panel.How can I do that?

And if we use card layout in it then how can i use that as on click button i have called an object of a new class. as

Card layout consider each component in a container as card and i want whole Jpanel as a card so is it possible to do that???

Can We do nesting of Jpanels in it?

Please suggest me a right way to do that?

here is SSCCE:

// this is the  main class on which i want to use panel of other class
public class mymain 
{
    JFrame jframe =  new JFrame();
    JPanel panel = new JPanel();
    BorderLayout borderlayout = new BorderLayout();

public mymain()
{
    jframe.setLayout(borderlayout);
    JMenuBar menubar = new JMenuBar();
    jframe.setJMenuBar(menubar);

    JButton home_button = new JButton("HOME");
    menubar.add(home_button);
    jframe.getContentPane().add(panel,BorderLayout.CENTER);             
    panel.setLayout(new GridBagLayout());

    //here used containers over that frame              
             and call it from main()

}

here is another class to manage category is 

public class manageCategory 
{
JPanel panel = new JPanel();
GridBagLayout gridbglayout = new GridBagLayout();
GridBagConstraints gridbgconstraint = new GridBagConstraints();
public manageCategory()
{
            panel.setLayout(new BorderLayout());
    // i have again here used containers placed with grid bag layout
}

}

So now i want that as i click on home button used in mymain class then the panel that is used in manageCategory() should be displayed on the same panel.and when i again click on home button then the mymain panel get displayed.how can i do that???

like image 312
Geetanjali Avatar asked Sep 09 '11 07:09

Geetanjali


People also ask

What is the difference between JPanel and JFrame?

Basically, a JFrame represents a framed window and a JPanel represents some area in which controls (e.g., buttons, checkboxes, and textfields) and visuals (e.g., figures, pictures, and even text) can appear.

Can you pack a JPanel?

Then the answer to your question is no, there is no other way to do this, the API was designed from the start to make use of the layout managers.

Why do we use JPanel?

JPanel, a part of the Java Swing package, is a container that can store a group of components. The main task of JPanel is to organize components, various layouts can be set in JPanel which provide better organization of components, however, it does not have a title bar.


1 Answers

I would advise you to use a CardLayout for this task.


Updated example with JPanel and "classes":

static class MainPanel extends JPanel {
    public MainPanel(final Container frame) {
        add(new JButton(new AbstractAction("Click to view next") {
            @Override
            public void actionPerformed(ActionEvent e) {
                frame.add(new NextPanel(), "NextPanel");
                ((CardLayout) frame.getLayout()).show(frame, "NextPanel");
            }
        }));
    }
}

static class NextPanel extends JPanel {
    public NextPanel() {
        add(new JLabel("Next page in the card layout"));
    }
}

public static void main(String[] args) throws Exception {
    JFrame frame = new JFrame("Test");
    frame.setLayout(new CardLayout());
    frame.add(new MainPanel(frame.getContentPane()), "MainPanel");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}
like image 184
dacwe Avatar answered Sep 28 '22 04:09

dacwe