Swing, Gridbaglayout Panel in Panel;funzt nicht!!

Stream1241

Mitglied
Hallo,

hoffe es ist noch jemand wach der mir Helfen kann, und zwar habe ich ein Frame erstellt
(1024x960), darin habe ich ein Panel(Gridbaglayout) eingefügt welches mehrere Element hat (5) wobei
nur das Mittlere als späteres Arbeitspanel wichtig ist.
Habe alles ausgerichtet das es nach meinen wünschen passt, und möchte in dieses Mittelpanel
ein Element (Jpanel(Gridbaglayout) / ein Bild oder sonstiges) einfügen.
dieses funktioniert zwar, aber der Containerpanel(Mittlerespanel) vergrößert sich, je nachdem wie groß das eizufügende Element ist.
Habe schon den Ganzen Tag probiert das Mittlerepannel irgendwie festzusetzen (setMaxSize oder setPreferredSize oder über ipady und ipady)
aber es funktioniert einfach nicht:-((((;(;(

hier mal meine Codes , ich hoffe es erbarmt sich jemand der mir das Problem erklären kann, bekomme nämlich langsam Hirnlähmung!!😀

Meine Main Klasse
Java:
public class Main_Wokler {

    
	public static void main(String[] args) {
        JFrame frame = new JFrame("WOKLER");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(1280,970)); 	
        frame.setContentPane(new HintergrundPanel("wok3.jpg"));
        frame.setLayout(new GridBagLayout()); 

        frame.add(Grundpanel.erstelleGP());
 
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setVisible(true);
		}


}

Dann meine Grundpanel Klasse in der ich das Mittlere Panel definiere und Ausrichte:
Java:
public class Grundpanel extends JPanel  {

	GridBagLayout gbl=new GridBagLayout();

	
	public Grundpanel(){
		setLayout(gbl);
		setOpaque(false);
		setPreferredSize(new Dimension(1200, 900));
	    JPanel jpoben=new JPanel();
	    jpoben.setBackground(Color.blue);
	    jpoben.setOpaque(false);
	    JPanel jprechts=new JPanel();
	    jprechts.setBackground(Color.yellow);
	    jprechts.setOpaque(true);
	    JPanel jpunten=new JPanel();
	    jpunten.setBackground(Color.black);
	    jpunten.setOpaque(false);
	    JPanel jplinks=new JPanel();
	    jplinks.setBackground(Color.red);
	    jplinks.setOpaque(true);
	    JPanel jpzentrum=new JPanel();
		jpzentrum.setBackground(new Color(0,59,207));
		jpzentrum.setBorder(new SoftBevelBorder( SoftBevelBorder.RAISED ));
		jpzentrum.setLayout(gbl);
		jpzentrum.setMaximumSize(new Dimension(1000,700));
		
		jpzentrum.add(Testpanel.erstelleTP());

     addGBL(jpoben, 0, 0, 3, 1, GridBagConstraints.BOTH, 1200, 110,new Insets(2, 2, 2, 2));
     addGBL(jprechts, 2, 1, 1, 1, GridBagConstraints.BOTH, 10, 800,new Insets(2, 2, 2, 2));
     addGBL(jpunten, 0, 2, 3, 1, GridBagConstraints.BOTH, 1200,40,new Insets(2, 2, 2, 2));
     addGBL(jplinks, 0, 1, 1, 1, GridBagConstraints.BOTH, 10, 800,new Insets(2, 2, 2, 2));
     addGBL(jpzentrum, 1, 1, 1, 1, GridBagConstraints.BOTH,1180,800,new Insets(2, 2, 2, 2));
     

   }
	public static Component erstelleGP(){
		return new Grundpanel();
	}
	
		public void addGBL(Component f, int gridx, int gridy, int gridwidth, int gridheight,
	            			int fill, double weightx, double weighty, Insets insets){
	        GridBagConstraints c=new GridBagConstraints();
	        c.gridx=gridx;
	        c.gridy=gridy;
	        c.gridheight=gridheight;
	        c.gridwidth=gridwidth;
	        c.fill=fill;
	        c.weightx=weightx;
	        c.weighty=weighty;
	        c.insets=insets;
	        gbl.setConstraints(f, c);
	        add(f);
}
		public void addGBL(ArbeitsPanel f, int gridx, int gridy, int gridwidth, int gridheight,
    			int fill, double weightx, double weighty, Insets insets){
			GridBagConstraints c=new GridBagConstraints();
			c.gridx=gridx;
			c.gridy=gridy;
			c.gridheight=gridheight;
			c.gridwidth=gridwidth;
			c.fill=fill;
			c.weightx=weightx;
			c.weighty=weighty;
			c.insets=insets;
			gbl.setConstraints(f, c);
			add(f);
			}

}

und zum schluss ein Testpanel welches vom Aufbau das selbe ist wie das Grundpanel,
hatte es aber auch schon mit einem Icon auf einem JLabel versucht(gleich Ergebniss,
je größer das Bild desto größer wird mein Mittleres Grundpanel)!!:

Java:
public class Testpanel extends JPanel  {
	GridBagLayout gbl=new GridBagLayout();

	
	public Testpanel(){
		setLayout(gbl);
		setOpaque(false);
		//setPreferredSize(new Dimension(900, 600));  *// solange auskommentiert alles ok, halt nur 
														//zu klein!! ansonsten vergrößert sich das Containerpanel mit!!
	    JPanel jpoben=new JPanel();
	    jpoben.setBackground(Color.blue);
	    jpoben.setOpaque(false);
	    JPanel jprechts=new JPanel();
	    jprechts.setBackground(Color.yellow);
	    jprechts.setOpaque(true);
	    JPanel jpunten=new JPanel();
	    jpunten.setBackground(Color.black);
	    jpunten.setOpaque(false);
	    JPanel jplinks=new JPanel();
	    jplinks.setBackground(Color.red);
	    jplinks.setOpaque(true);
	    JPanel jpzentrum=new JPanel();
		jpzentrum.setBackground(Color.green);
		jpzentrum.setBorder(new SoftBevelBorder( SoftBevelBorder.RAISED ));
		jpzentrum.setLayout(gbl);


     addGBL(jpoben, 0, 0, 3, 1, GridBagConstraints.BOTH, 1200, 110,new Insets(2, 2, 2, 2));
     addGBL(jprechts, 2, 1, 1, 1, GridBagConstraints.BOTH, 10, 800,new Insets(2, 2, 2, 2));
     addGBL(jpunten, 0, 2, 3, 1, GridBagConstraints.BOTH, 1200,40,new Insets(2, 2, 2, 2));
     addGBL(jplinks, 0, 1, 1, 1, GridBagConstraints.BOTH, 10, 800,new Insets(2, 2, 2, 2));
     addGBL(jpzentrum, 1, 1, 1, 1, GridBagConstraints.BOTH,1180,800,new Insets(2, 2, 2, 2));
     

   }
	public static Component erstelleTP(){
		return new Testpanel();
	}
	
		public void addGBL(Component f, int gridx, int gridy, int gridwidth, int gridheight,
	            			int fill, double weightx, double weighty, Insets insets){
	        GridBagConstraints c=new GridBagConstraints();
	        c.gridx=gridx;
	        c.gridy=gridy;
	        c.gridheight=gridheight;
	        c.gridwidth=gridwidth;
	        c.fill=fill;
	        c.weightx=weightx;
	        c.weighty=weighty;
	        c.insets=insets;
	        gbl.setConstraints(f, c);
	        add(f);
}
		public void addGBL(ArbeitsPanel f, int gridx, int gridy, int gridwidth, int gridheight,
    			int fill, double weightx, double weighty, Insets insets){
			GridBagConstraints c=new GridBagConstraints();
			c.gridx=gridx;
			c.gridy=gridy;
			c.gridheight=gridheight;
			c.gridwidth=gridwidth;
			c.fill=fill;
			c.weightx=weightx;
			c.weighty=weighty;
			c.insets=insets;
			gbl.setConstraints(f, c);
			add(f);
			}

}

Hab die Problemzeile Kommentiert

vielen Dank im voraus ,

gruß Stream
 
Hey,

hab glaube ich endlich den Fehler gefunden, und zwar denke ich das aufgrund das das Mittlere Panel auf BOTH gesetzt war
es keine Festlegenden Werte angenommen hat, und sich deshalb ausdehnt.
Habe jetzt auf NONE geändert Arbeitspanel über setPreferredSize festgelegt und Testpanels eingefügt und Das Arbeitspanel
behält jetzt seine Größe!!

Gruß Stream
 
Eine Sache fällt mir auf: Die Angaben weightx und weighty sind eher als prozentuale Werte zu verstehen, sprich wie verhält sich die Komponente bei Vergrößerung/Verkleinerung des Containers. Entsprechend sind hier Werte zwischen 0.0 und 1.0 (= 100%) üblich. 1.0 heißt dann etwa soviel wie "nutze den vollständigen neuen Platz bei einer Vergrößerung". Das jeweils getrennt nach x-(Zeile) und y-(Spalte)Richtung.

Wie groß (in Pixeln) die Komponente im GBL ist richtet sich daher nicht nach dem Layout sondern nach der preferredSize der Komponente.
 
Hex ,

Danke!! Hab mich jetzt nochmals in die Weighty Angaben eingelesen und bin echt vom Falschen Ansatz her drangegangen!!
Jetzt über preferredSize funktioniert alles so wie es soll!!

Gruß Stream
 

Zurück
Oben