# Probleme bei BorderLayout im JPanel



## pc-world (11. Jun 2008)

Ich bin z. Z. dabei, einen alten JFrame in ein JPanel zu stecken (und das Panel kommt in eine JTabbedPane).
Doch habe ich da ein Problem mit dem BorderLayout.

```
dasPanel.add(BorderLayout.EAST, irgendEinAnderesPanel);
```
Das Panel irgendEinAnderesPanel wird jetzt links oben angezeigt.

Wie kriege ich den Layoutmanager dazu rum, dass er das macht, was ich will (also dass das Panel im _Osten _ist)?


----------



## SlaterB (11. Jun 2008)

eine Möglichkeit:
füge im Osten ein ZwischenPanel ein und darin mit GridBagLayout das irgendEinAnderesPanel


----------



## pc-world (13. Jun 2008)

SlaterB hat gesagt.:
			
		

> eine Möglichkeit:
> füge im Osten ein ZwischenPanel ein und darin mit GridBagLayout das irgendEinAnderesPanel



So weit bin ich:


```
package testPackage;

import java.awt.*;
import javax.swing.*;

public class PanelAusrichtungTest {

	public static void main(String[] args) {

		JFrame fenster = new JFrame("PanelAusrichtungTest");
		fenster.setSize(300, 300);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel aeusseresPanel = new JPanel();

		JPanel inneresPanel = new JPanel();
		JButton button = new JButton("Test-Button");
		inneresPanel.add(button);
		
		aeusseresPanel.add(inneresPanel);
		fenster.add(aeusseresPanel);
		fenster.setVisible(true);

	}
	
}
```

Wie das mit dem GridBagLayout, weiß ich nicht (habe aber in der FAQ nachgeschaut).
Mit 
	
	
	
	





```
JButton button = new JButton(GridBagLayout, "Test-Button");
```
 geht es nicht.


----------



## SlaterB (13. Jun 2008)

wo ist das EAST und dein äußeres Panel hatte ja noch gar kein BorderLayout?


```
public class PanelAusrichtungTest
{

    public static void main(String[] args)
    {
        JFrame fenster = new JFrame("PanelAusrichtungTest");
        fenster.setSize(300, 300);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel aeusseresPanel = new JPanel();
        aeusseresPanel.setLayout(new BorderLayout());

        JPanel inneresPanel = new JPanel();
        inneresPanel.setBackground(Color.GREEN);
         inneresPanel.setLayout(new GridBagLayout());
        JButton button = new JButton("Test-Button");
        inneresPanel.add(button);

        aeusseresPanel.add(inneresPanel, BorderLayout.EAST);
        fenster.add(aeusseresPanel);
        fenster.setVisible(true);
    }
}
```


----------



## pc-world (13. Jun 2008)

SlaterB hat gesagt.:
			
		

> wo ist das EAST und dein äußeres Panel hatte ja noch gar kein BorderLayout?



Hatte ich vergessen, mit reinzuschreiben 



			
				SlaterB hat gesagt.:
			
		

> ```
> public class PanelAusrichtungTest
> {
> 
> ...



Danke, jetzt funktioniert es!


----------



## pc-world (13. Jun 2008)

Habe das ganze auf mein Programm übertragen, funktioniert aber nicht.
Der Unterschied ist, dass das Panel in einer Tab-Leiste ist.

Ich habe zwei Klassen:

*GUI_neuesFenster *(mit der Main-Methode)

```
package testPackage2;

import java.awt.*;

import javax.swing.*;

public class GUI_neuesFenster {
	private JFrame fenster;
	private JPanel gesamtEastPanel = new JPanel();
	private JPanel eastPanel = new JPanel();
	private JTabbedPaneWithCloseIcons tabs = new JTabbedPaneWithCloseIcons();

	public GUI_neuesFenster(String titel) {
		fenster = new JFrame();
		fenster.setSize(600, 600);
		fenster.setLocationRelativeTo(null);
		fenster.add(tabs);
		fenster.setTitle(titel);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public void setEastPanel(JPanel panel) {
		if (tabs.indexOfTabComponent(eastPanel) != -1) {
			tabs.remove(eastPanel);
		}
		fenster.remove(eastPanel);
		eastPanel = panel;
		eastPanel.setLayout(new GridBagLayout());
		gesamtEastPanel.add(BorderLayout.EAST, eastPanel);
		gesamtEastPanel.repaint();
		gesamtEastPanel.validate();
		tabs.add("Titel", gesamtEastPanel);
		fenster.validate();
	}
	
	public static void main(String[] args) {
		GUI_neuesFenster fenster = new GUI_neuesFenster("Test");
		JPanel panel = new JPanel();
		JButton button = new JButton("OK");
		panel.add(button);
		fenster.setEastPanel(panel);
		fenster.fenster.setVisible(true);
	}


}
```

Und dann noch die Klasse *JTabbedPaneWithCloseIcons*, sie erweitert _JTabbedPane_ und macht noch einen Button zum Schließen rein.

Doch die Ausgabe ist:





Was mache ich falsch (oder was macht Java falsch ;-))?


----------



## SlaterB (13. Jun 2008)

DU hast schon wieder vergessen, das BorderLayout zu setzen,
Standard für JPanel ist FlowLayout


----------



## pc-world (13. Jun 2008)

SlaterB hat gesagt.:
			
		

> DU hast schon wieder vergessen, das BorderLayout zu setzen,
> Standard für JPanel ist FlowLayout



Danke, jetzt weiß ich es hoffentlich _für immer_.


----------

