# JPanel in den Container hinzufügen



## simsa (22. Apr 2011)

Hallooo zusammen,

habe momentan Ärger mit dem JPanel. Ich habe in einer innere Klasse (Z:27) einen JPanel(GridLayout) mit atomaren Komponenten. Nun möchte ich im Konstruktor die innere Klasse(MyPanel) in meinen Container hinzufügen und im BorderLayout im SOUTH plazieren. Und das klappt nicht.

Wenn ich den Code von der inneren Klasse in den Konstruktor packe, bekomme ich das was ich eigentlich haben möchte. Allerdings möchte ich eine klare Trennung zwischen dem Panel und dem Frame, weil ich noch mehrere Panel benötige.

[Java]
package swing;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Panel_Test {


	public Panel_Test(){

		JFrame frame = new JFrame("Viewer");
		Container container = frame.getContentPane();
		container.setLayout(new BorderLayout());

		container.add(new MyPanel(), BorderLayout.SOUTH);

		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(800, 600);
		frame.setVisible(true);
	}

	class MyPanel extends JPanel{{

		JPanel mypanel = new JPanel(new GridLayout(0,1));

		mypanel.add(new JLabel("Text1"));
		mypanel.add(new JLabel("Text2"));
		mypanel.add(new JLabel("Text3"));


	}}

	public static void main(String[] args) {
		new Panel_Test();
	}

}
[/Java]

Frohe Ostern


----------



## eRaaaa (22. Apr 2011)

Du erweiterst doch schon JPanel in deiner inneren Klasse ?! Wieso erstellst du dann dort noch einmal ein JPanel (mit dem du übrigens dann nichts weiter tust!!)


```
class MyPanel extends JPanel {
		{

			setLayout(new GridLayout(0, 1));

			add(new JLabel("Text1"));
			add(new JLabel("Text2"));
			add(new JLabel("Text3"));

		}
	}
```

oder eben in deinem jetzigen Code zumindest noch so etwas wie add(mypanel)...???:L


----------



## Antoras (22. Apr 2011)

```
class MyPanel extends JPanel {
  MyPanel() {
    super(new GridLayout(0,1));
    add(new JLabel("Text1"));
    add(new JLabel("Text2"));
    add(new JLabel("Text3"));    
  }
}
```
Irgendwie so. Ansonsten erstellst du innerhalb von MyPanel ein neues Panel, fügst deinem Frame aber nicht dieses neue Panel hinzu, sondern das leere MyPanel.


----------



## simsa (22. Apr 2011)

danke, es klappt. Ich hatte einen Denkfehler. Wie eRaaaa schon richtig bemerkt hat habe ich ein JPanel erzeugt, welches ich nicht benutzt habe. Beide Lösungsvorschläge klappen.

Der Gedankenfehler von mir war, in ein neu erzeuges JPanel in der inneren Klassen, die atomaren Komponenten hinzuzufügen und als eine Einheit dem LayoutManger im Konstruktor zu übergeben. Anscheinend ist das doppelt gemoppelt. Nunja jetzt klappt. Danke euch beiden


----------

