user820913
user820913

Reputation: 619

The function of JPanel

I am working with Swing, trying to learn how to use it. I am doing an excercise in my book where I am supposed to make buttons (JButtons) like the ones a dvd-player has. I am adding no funcionality to the buttons at this point. The program worked just fine when I first ran it. Then I thought that I would expand it by making a second panel (JPanel) with the same buttons. When I run my code however, I just get one set of buttons (not two areas with two sets of buttons). Have I misunderstood the concept of Panels? I have understood a Panel to be an area (a container) in my frame where I can display different output, and that I can have several panels i one frame.

Here is my code:

import javax.swing.*;

public class Oppgave91 extends JFrame
{

    public Oppgave91()
    {
        super ("We make buttons");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        JButton play = new JButton("Play");
        JButton stopeject = new JButton("Stop/Eject");
        JButton rewind = new JButton("Rewind");
        JButton fastforward = new JButton("FastForward");
        JButton pause = new JButton("Pause");

        JPanel panel = new JPanel();
        panel.add(play);
        panel.add(stopeject);
        panel.add(rewind);
        panel.add(fastforward);
        panel.add(pause);

        JPanel panel2 = new JPanel();
        panel2.add(play);
        panel2.add(stopeject);
        panel2.add(rewind);
        panel2.add(fastforward);
        panel2.add(pause);

        add(panel);
        add(panel2);
        setVisible(true);

    }


    public static void main(String[] args) 
    {
        Oppgave91 showbuttons = new Oppgave91();
        showbuttons.pack();

    }

}

Upvotes: 1

Views: 391

Answers (1)

ControlAltDel
ControlAltDel

Reputation: 35011

A component can have only 1 parent. See the last line of my code snippet for how it should be done

JPanel panel = new JPanel();
panel.add(play);
panel.add(stopeject);
panel.add(rewind);
panel.add(fastforward);
panel.add(pause);

//right now panel is the parent component of play, stop, eject

JPanel panel2 = new JPanel();
panel2.add(play); //play is now owned by panel2, not panel
panel2.add(stopeject); //stopeject is now owned by panel2, not panel
panel2.add(new JButton("Rewind")); // this is how you should do this

Upvotes: 3

Related Questions