Java GridBagLayout Probleme



  • Hallo zusammen,

    ich probiere zum erstenmal das GridBagLayot aus und habe prompt Schwierigkeiten am Hals. ^^
    Meine Frage lautet: Löst ihr ein Layout Problem ausschließlich mit dem GridBagLayout? In den Büchern die gelesen habe steht immer nur, dass man entweder viele andere Layout-Manager(Flow,Border etc.) verschachtelt oder man nutzt gleich das GridBagLayout. Allerdings kriege ich meine Layout Vorstellungen nicht allein mit dem GridBagLayout realisiert.
    Bin ich nur unfähig ^^, oder schachtelt ihr das GridBagLayout auch noch mit anderen Layout-Managern?

    schnönen Tag noch....



  • Ich hab mal versucht, alles nur mit dem Springlayout zu lösen. *g* Aber das ging auch nicht so recht.
    Ich verwende dann meist JPanel und andere Layoutmanager. Denke auch, dass diese Vorgehensweise recht weit verbreitet ist.



  • ok, dann habe ich aber direkt die nächste frage. 🙂

    ich habe versucht mir eine grobe struktur durchs grdibaglayout zu erstellen was auch ganz gut klappt und in diesen zellen wollte ich dann panel benutzen, welche wieder andere layouts benutzen. das müsste ja eigentlich klappen. weiß einer vielleicht ob man nem panel wieder ein gridbaglayout aufzwingen kann und dieses dann auch funktioniert? bei meinem versuch (code weiter unten) wird der inhalt des panel irgendwie nicht richtig dargestellt. das textfeld zum beispiel, wird überhaupt nicht richtig angezeigt, obwohl ich die constraints dafür gesetzt habe.

    import javax.swing.*;
    import java.awt.*;
    import javax.swing.border.*;
    
    public class SAXGUI extends JFrame{
    
    	public SAXGUI(){
    
    		super("SaxTool     v0.1");
    		// Layout einrichten 
    		GridBagLayout gridbag = new GridBagLayout();
    
    		// Constarints für die Schaltfläche definieren 
    		GridBagConstraints constraints = new GridBagConstraints();
    
    		this.getContentPane().setLayout(gridbag);
    
    		this.setSize(500,400);
    
    		// ------------------------ Menue --------------------------------
    		JMenuBar menubar = new JMenuBar();
    	   	this.setJMenuBar(menubar);
    
    		JMenu menu = new JMenu("Datei");
    
    		JMenuItem item1 = new JMenuItem("Datei laden");
       		JMenuItem item2 = new JMenuItem("Programm beenden");
    
       		menu.add(item1);
       		menu.add(item2);
    
       		menubar.add(menu);
    
    		// ------------------------ 1. Komponente ------------------------
    		constraints.fill = GridBagConstraints.BOTH;
    
    		constraints.gridx= 0;
    		constraints.gridy= 0;
    		constraints.gridwidth= 3;
    		constraints.gridheight= 1;
    		constraints.weightx= 40;
    		constraints.weighty= 20;
    		constraints.ipadx=0;
    		constraints.anchor=GridBagConstraints.CENTER;
    
    		JPanel pane1 = new JPanel();
    		// Nun die Constraints mit dem Layout und der Komponente verbinden...
    		gridbag.setConstraints(pane1, constraints);
    		// Und alles dem Haupt-Panel hinzufuegen...
    
    		pane1.setLayout(new GridBagLayout());
    
    		JLabel laelementname = new JLabel("Elementname:");
    		JTextField felementname = new JTextField();
    		//felementname.setEditable(true);
    
    		constraints.fill = GridBagConstraints.NONE;
    		constraints.gridx= 0;
    		constraints.gridy= 0;
    		constraints.gridwidth= 1;
    		constraints.gridheight= 1;
    		constraints.weightx= 30;
    		constraints.weighty= 100;
    		constraints.ipadx=0;
    		constraints.anchor=GridBagConstraints.WEST;
    		gridbag.setConstraints(laelementname, constraints);
    
    		constraints.fill = GridBagConstraints.BOTH;
    		constraints.gridx= 1;
    		constraints.gridy= 0;
    		constraints.gridwidth= 2;
    		constraints.gridheight= 1;
    		constraints.weightx= 70;
    		constraints.weighty= 0;
    		constraints.ipadx=0;
    		constraints.anchor=GridBagConstraints.CENTER;
    		gridbag.setConstraints(felementname, constraints);
    
    		pane1.add(laelementname);
    		pane1.add(felementname);
    
    		this.getContentPane().add(pane1);
    
    		// ------------------------ 2. Komponente ------------------------
    		constraints.fill = GridBagConstraints.BOTH;
    
    		constraints.gridx= 3;
    		constraints.gridy= 0;
    		constraints.gridwidth= 4;
    		constraints.gridheight= 1;
    		constraints.weightx= 60;
    		constraints.weighty= 20;
    		constraints.ipadx=0;
    		constraints.anchor=GridBagConstraints.CENTER;
    
    		JButton label2 = new JButton();
    		// Nun die Constraints mit dem Layout und der Komponente verbinden...
    		gridbag.setConstraints(label2, constraints);
    		// Und alles dem Haupt-Panel hinzufuegen...
    		this.getContentPane().add(label2);
    
    		// ------------------------ 3. Komponente ------------------------
    		constraints.fill = GridBagConstraints.BOTH;
    
    		constraints.gridx= 0;
    		constraints.gridy= 1;
    		constraints.gridwidth= 3;
    		constraints.gridheight= 4;
    		constraints.weightx= 40;
    		constraints.weighty= 80;
    		constraints.ipadx=0;
    		constraints.anchor=GridBagConstraints.CENTER;
    
    		JButton label3 = new JButton();
    		// Nun die Constraints mit dem Layout und der Komponente verbinden...
    		gridbag.setConstraints(label3, constraints);
    		// Und alles dem Haupt-Panel hinzufuegen...
    		this.getContentPane().add(label3);
    
    		// ------------------------ 4. Komponente ------------------------
    		constraints.fill = GridBagConstraints.BOTH;
    
    		constraints.gridx= 3;
    		constraints.gridy= 1;
    		constraints.gridwidth= 4;
    		constraints.gridheight= 4;
    		constraints.weightx= 60;
    		constraints.weighty= 80;
    		constraints.ipadx=0;
    		constraints.anchor=GridBagConstraints.CENTER;
    
    		JButton label4 = new JButton();
    		// Nun die Constraints mit dem Layout und der Komponente verbinden...
    		gridbag.setConstraints(label4, constraints);
    		// Und alles dem Haupt-Panel hinzufuegen...
    		this.getContentPane().add(label4);
    
    	} // Ende des Kosntruktors
    
    	public static void main(String[]args){
    
    		SAXGUI frame = new SAXGUI();
    		frame.show();	
    
    	}
    
    } // Ende der Klasse SAXGUI
    

    vielleicht sieht ja jemand nen denkfehler... :p



  • Den Code habe ich mir nicht angesehen, leider wenig Zeit.
    Aber es ist möglich, Layoutmanager für JPanels zu setzen. Standard ist das FlowLayout aktiv. Mit setLayout kannst du aber auch ein anderes Layout setzen.



  • Das funktioniert doch ganz okay mit den statischen Pixelgrössen. Dein Textfeld ist nur so klein, weil du beim Aufruf des Konstruktors keine Grösse angegeben hast und bei einer Eingabe ins Textfeld die Grösse nicht neu angepasst wird.
    Versuchs mal mit:

    felementname = new JTextField(10);
    

    Achja wäre auch cool, wenn du eine Abbruchbedingung in dein Programm einbauen könntest... z.B. mit der event Klasse von awt:

    public static void main(String[]args){ 
    	SAXGUI frame = new SAXGUI(); 
    	frame.addWindowListener(new java.awt.event.WindowAdapter() {
    		public void windowClosing(java.awt.event.WindowEvent e) {
    			System.exit(0);            	
    		}
    	});
    	frame.show();    
    }
    

Anmelden zum Antworten