Layouts verschachteln

Status
Nicht offen für weitere Antworten.

Gubi

Mitglied
Hallo,

ich bin neu hier und habe ein Problem. Will einen Texteditor bauen. Habe ein GridLayout genommem um alles zu struktorieren. Jetzt will ich oben aber 3 Buttons einsetzten, es geht jedoch nur einer. Muss ich jetzt ein Layout in mein Gridlayout packen? Und wenn ja wie? Will jetzt keinen fertigen Quellcode, jedoch einen "Quellcode Beispiel" damit ich weiß wie es aussehen muss.

Über Antworten würde ich mich sehr freuen.


Greetz
Gubi
 

Anubis

Bekanntes Mitglied
Das geht ganz einfach. Erzeuge ein Panel() setzte in dem Panel das entsprechende Layout. Pake dort die Button rein. Und zuletzt packst du das Panel oben hin, wo die Button hin sollten.
 

foobar

Top Contributor
Code:
this.getContentPane().setlayout( new BorderLayout());
this.getContentPane().add(panel, Borderlayout.North);
 

Gubi

Mitglied
vielleicht kann mir das mal einer an diesem beispiel hier zeigen, kriegs nicht hin...

Code:
SchachtelLayout() {
        super("Border");
        setSize(240, 280);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel pane = new JPanel();
        pane.setLayout(new BorderLayout());
        pane.add("North", north);
        pane.add("South", south);
        pane.add("East", east);
        pane.add("West", west);
        pane.add("Center", center);
        setContentPane(pane);
 

foobar

Top Contributor
Code:
import java.awt.*;
import java.awt.Container;
import javax.swing.*;

public class BorderLayoutDemo extends JFrame
{
	private JButton btnFoo, btnBar, btnBaz;
	private Container con;
	private JPanel pnlNorth, pnlCenter;
	public BorderLayoutDemo()
	{
		this.setSize(300, 300);
		this.createUI();
		this.setVisible(true);
	}
	
	private void createUI()
	{
		this.con 			= this.getContentPane();
		
		this.btnFoo 	= new JButton("foo");
		this.btnBar 	= new JButton("bar");
		this.btnBaz 	= new JButton("baz");
		
		this.pnlNorth 	= new JPanel();
		this.pnlNorth.setBackground(Color.RED);
		this.pnlCenter = new JPanel();
		this.pnlCenter.setBackground(Color.BLUE);
		
		this.pnlNorth.add(this.btnFoo);
		this.pnlNorth.add(this.btnBar);
		this.pnlNorth.add(this.btnBaz);
		
		this.con.add(pnlNorth, BorderLayout.NORTH);
		this.con.add(pnlCenter, BorderLayout.CENTER);
	}
	
	public static void main(String[] args)
	{
		new BorderLayoutDemo();
	}
}
 

m!k3

Bekanntes Mitglied
Wenn ich einen JFrame selber erzeuge krieg ich das Ganze einfach nicht hin :?

Code:
JFrame frame = new JFrame();
frame.setSize(430,155);
frame.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        
JTextField username     = new JTextField();
JTextField gender       = new JTextField();
JTextField birthday     = new JTextField();
JPasswordField password = new JPasswordField();
JTextArea info          = new JTextArea();
        
JLabel username_lab     = new JLabel("Username:");
JLabel gender_lab       = new JLabel("Gender:");
JLabel birthday_lab     = new JLabel("Birthday:");
JLabel password_lab     = new JLabel("Password");
JLabel info_lab         = new JLabel("Info");
        
Container con       = new Container();
JPanel northPanel   = new JPanel();
JPanel southPanel   = new JPanel();
        
northPanel.setLayout(null);
southPanel.setLayout(null);
        
username_lab.setBounds(5,10,100,25);
username.setBounds(110,10,100,25);
password_lab.setBounds(220,10,100,25);
password.setBounds(325,10,100,25);
gender_lab.setBounds(5,40,100,25);
gender.setBounds(110,40,100,25);
birthday_lab.setBounds(220,40,100,25);
birthday.setBounds(325,40,100,25);     
info_lab.setBounds(5,75,100,25);
info.setBounds(110,75,315,25);
        
northPanel.add(username_lab);
northPanel.add(username);
northPanel.add(password_lab);
northPanel.add(password);
northPanel.add(gender_lab);
northPanel.add(gender);
northPanel.add(birthday_lab);
northPanel.add(birthday);
        
southPanel.add(info_lab);
southPanel.add(info);
        
con.add(northPanel, BorderLayout.NORTH);
con.add(southPanel, BorderLayout.SOUTH);
        
frame.setTitle("Register 2 Chat");
frame.getContentPane().add( con );

//frame.pack();
//frame.show();
frame.setVisible(true);

Was mach ich denn falsch?! Keine einzige Komponente wird angezeigt.. nur ein leerer Frame :bahnhof:

edit: Bitte keine Kommentare, was das Ganze noch für einen Sinn macht wenn ich überall kein Layout verwende @ JPanel's... war zuerst anders vorgesehn, und ich möchte trotzdem wissen wie das mit dem Container funktioniert... :)
 

Griffin

Bekanntes Mitglied
Also da:

Code:
northPanel.setLayout(null);
southPanel.setLayout(null);

würd ich erstmal ein Layout reinhauen, vielleicht funktioniert es nicht ohne!?!?

Und hier hast du ein BorderLayout ohne es vorher zu definieren, zumindest nicht im sichtbaren Code:

Code:
con.add(northPanel, BorderLayout.NORTH);
con.add(southPanel, BorderLayout.SOUTH);

Aber da das Programm startet geh ich davon aus, dass das nicht der Fehler ist.

Probier mal ob das BorderLayout überhaupt richtig dargestellt wird
(ich bedien mich mal foobars idee ;) )

Code:
nortPanel.setBackground(Color.RED);
southPanel.setBackground(Color.BLUE);


P.S. bevor die keiner antwortet tu lieber ich das :p
 
G

Gast

Gast
ne.. hatte vorher schon BorderLayout drin... hat das im nachhinein geändert weil ich wissen wollt ob ohne nen Container wenigstens was dargestellt wird.. also nur ein Panel dem Frame zugewiesen..
 

m!k3

Bekanntes Mitglied
btw.... das mit den Backgroundfarben geht nicht :(

also irgendwie geht der Container nicht auf den Frame.. oder die Panels nicht auf den Container.. hab auch ein Layout nun zugewiesen den JPanels... funzt auch nicht :(

also ich rede vom Beispiel siehe paar Einträge höher..
 
G

Guest

Gast
Ersetze

Container con = new Container();

durch

JPanel con = new JPanel();
con.setLayout(new BorderLayout());
 

m!k3

Bekanntes Mitglied
Code:
/*
 * MyFrame.java
 *
 * Created on 18. September 2004, 22:52
 */
import java.awt.*;
import javax.swing.*;

/**
 *
 * @author  mike
 */
public class MyFrame extends JFrame {
    
    /** Creates a new instance of MyFrame */
    public MyFrame(){
        this.setSize(430,155); 
        this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 

        JPanel contentPane  = new JPanel();
        JPanel northPanel   = new JPanel(); 
        JPanel southPanel   = new JPanel(); 

        contentPane.setLayout(new BorderLayout());
        northPanel.setLayout(new BorderLayout()); 
        southPanel.setLayout(new BorderLayout()); 

        northPanel.setBackground(Color.RED);
        southPanel.setBackground(Color.BLUE);
        contentPane.add(northPanel, BorderLayout.NORTH); 
        contentPane.add(southPanel, BorderLayout.SOUTH); 

        this.setTitle("Register 2 Chat"); 
        this.setContentPane( contentPane );

        //frame.pack(); 
        //frame.show(); 
        this.setVisible(true);
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new MyFrame();
    }
    
}

bin wohl zu blöd dafür... hmmm... :cry:
 
G

Guest

Gast
Die Panels, die Du erzeugst sind leer und haben zunächst mal keine
Größe. BorderLayout bestimmt die Größe einer Komponente über
getPreferredSize()
Klartext: setPreferredSize(new Dimension(###, ###)); oder paar Komponente
in die Panels einfügen.
z.B.
Code:
JPanel northPanel   = new JPanel();
JPanel southPanel   = new JPanel();
northPanel.setPreferredSize(new Dimension(1,50));
southPanel.setPreferredSize(new Dimension(1,22));
 
G

Guest

Gast
Noch etwas gibt's bei BorderLayout.
Bei BorderLayout.NORTH und BorderLayout.SOUTH wird die Breite einer
Komponente ignoriert und die Komponente wird der Breite des übergeordneten
Containers angepasst.
Bei BorderLayout.EAST und BorderLayout.WEST wird wieder die Höhe ignoriert.
BorderLayout.CENTER zieht die Komponente auf die Größe des restlichen
verfügbaren Platzes (horizontal und vertikal).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben