BoarderLayout

Status
Nicht offen für weitere Antworten.

BlubBlub

Bekanntes Mitglied
hi ich hab folgendes problem und hoffe ihr könnt mir da weiterhelfen.

ich wolllte ein Fenster erstellen. das fenster soll dreigeteilt sein.
in oben, mitte und unten. dies hab ich versucht mit dem boarderlayout hinzukriegen
doch irgendwie funktioniert das nicht richtig, was hab ich falsch gemacht?

Java:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

class MyFrame extends JFrame
{
	MyFrame()
	{
		super("VersuchsFenster"); 
		setSize(1000, 600); 
		setVisible(true); 
		setDefaultCloseOperation(EXIT_ON_CLOSE); 
		
		getContentPane().setLayout(new BorderLayout()); 
		getContentPane().add(new testPanel1(),  BorderLayout.NORTH); 
		getContentPane().add(new testPanel2(),  BorderLayout.CENTER);
		getContentPane().add(new testPanel3(),  BorderLayout.SOUTH);	
	}
	
	class testPanel1 extends JPanel
	{
		testPanel1()
		{
			JLabel text = new JLabel("testPanel1");
			getContentPane().add(text);
		}
	}
	
	class testPanel2 extends JPanel
	{
		testPanel2()
		{
			JLabel text = new JLabel("testPanel2");
			getContentPane().add(text);
		}
	}
	
	class testPanel3 extends JPanel
	{
		testPanel3()
		{
			JLabel text = new JLabel("testPanel3");
			getContentPane().add(text);
		}
	}
}

public class LayOutVersuche 
{
	public static void main(String[] args)
	{
		new MyFrame();
	}
}
 
G

Gast2

Gast
1. Klassennamen schreibt man groß
2. Es lässt sich nicht kompilieren schau dir mal die API zu JPanel an da gibts keine getContentPane methode?!?!?!
3. setVisible immer als letztes aufrufen
 

BlubBlub

Bekanntes Mitglied
doch es gibt eine getContentPane () methode, das programm lässt sich auch kompilieren, es läuft ja bei mir. nur die panels werden nicht untereinander angeordnet, sondern nur das dritte panel wird bei mir eingefügt, die beiden anderen fehlen.

zusatz:
zu der getContentPane() methode ich habe ja innere klassen in meiner MyFrame klasse und da diese von JFrame erbt hab ich wahrscheinllich die getContentPane() methode davon. muss das gleich nochmal recherchieren
 
Zuletzt bearbeitet:
G

Gast2

Gast
Ach gar nicht drauf geachtet dass das innere Klassen sind lol -.-...
ja die methode kommt von dem JFrame also weg damit und dann müsste es tun...
wenn du java 1.5 hast brauchst dich auch in deinem JFrame nimmer...
 

BlubBlub

Bekanntes Mitglied
ich benutze java 1.6

wenn ich den code jetzt so verändert habe, also die getContentPane() Methoden gelöscht habe, dann werden die Labels überhaupt nicht mehr angezeigt.

Java:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
class MyFrame extends JFrame
{
    MyFrame()
    {
        super("VersuchsFenster"); 
        setSize(1000, 600);  
        
        getContentPane().setLayout(new BorderLayout()); 
        getContentPane().add(new TestPanel1(),  BorderLayout.NORTH); 
        getContentPane().add(new TestPanel2(),  BorderLayout.CENTER);
        getContentPane().add(new TestPanel3(),  BorderLayout.SOUTH);    
        
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
        setVisible(true);
    }
    
    class TestPanel1 extends JPanel
    {
        TestPanel1()
        {
            JLabel text = new JLabel("PanelNr1");
        }
    }
    
    class TestPanel2 extends JPanel
    {
        TestPanel2()
        {
            JLabel text = new JLabel("PanelNr2");
        }
    }
    
    class TestPanel3 extends JPanel
    {
        TestPanel3()
        {
            JLabel text = new JLabel("PanelNr3");
        }
    }
}
 
public class LayOutVersuche 
{
    public static void main(String[] args)
    {
        new MyFrame();
    }
}
 

BlubBlub

Bekanntes Mitglied
cool jetzt gehts ^^ , aber eine frage hät ich da noch, jetzt stehen die Strings PanelNr1, PanelNr2, PanelNr3 zwar untereinander aber sie stehen mehr links beim fenster und im oberen teil ihrer panels. wie krieg ich es hin dass die Strings PanelNr1, PanelNr2 und PanelNr3 zentriert in ihrem jeweiligen panel stehen?
 

Verjigorm

Top Contributor
Code:
        setLayout(new BorderLayout());
            JLabel text = new JLabel("PanelNr1");
            text.setHorizontalAlignment(JLabel.CENTER);
            add(text, BorderLayout.CENTER);

Für alle 3 Panels wiederholen.
Bedenke, aber die Eigenart des Borderlayouts, dass CENTER die größere Gewichtung hat, also mehr Fläche einnimmt.
Wenn du willst, dass alle 3 Panels gleich hoch sind, muss dein JFrame z.B. ein GridLayout haben.

Generell scheinen dir wohl einige Grundlagen zu fehlen.
Arbeite doch erstmal eins der Sun-Tutorials oder so durch.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben