GridBagLayout verteilt Komponenten nicht so wie ichs will...

Weil das Panel in welchem diese letzten 3 Buttons platziert sind kein GridbagLayout hat.
Setze das Layout dieses Panels auch auf GridBag und schon klappt alles.
 
Weil das Panel in welchem diese letzten 3 Buttons platziert sind kein GridbagLayout hat.
Setze das Layout dieses Panels auch auf GridBag und schon klappt alles.

wie kann ich denn den button mit der aufschrift "textarea" 4mal so hoch machen?

geht net:

Code:
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Window;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainWindow extends JFrame
{

    private static final long serialVersionUID = 1L;
    private JPanel panel = new JPanel();
    
    public MainWindow()
    {
        
        
       setLayout(new GridBagLayout());

    JButton top = new JButton( "top" );
    GridBagConstraints topConstraints = new GridBagConstraints();
    topConstraints.gridx = 0;
    topConstraints.gridy = 0;
    topConstraints.gridwidth = 4;
    topConstraints.gridheight = 1;
    topConstraints.fill = GridBagConstraints.HORIZONTAL;
    add( top, topConstraints );
    
    JButton base = new JButton( "base" );
    GridBagConstraints baseConstraints = new GridBagConstraints();
    baseConstraints.gridx = 0;
    baseConstraints.gridy = 1;
    baseConstraints.gridwidth = 4;
    baseConstraints.gridheight = 1;
    baseConstraints.fill = GridBagConstraints.HORIZONTAL;
    add( base, baseConstraints);
    
    JButton button1 = new JButton( "button 1");
    GridBagConstraints button1Constraints = new GridBagConstraints();
    button1Constraints.gridx = 0;
    button1Constraints.gridy = 2;
    button1Constraints.gridwidth = 1;
    button1Constraints.gridheight = 1;
    add( button1, button1Constraints );
    
    JButton button2 = new JButton( "button 2");
    GridBagConstraints button2Constraints = new GridBagConstraints();
    button2Constraints.gridx = 1;
    button2Constraints.gridy = 2;
    button2Constraints.gridwidth = 1;
    button2Constraints.gridheight = 1;
    add( button2, button2Constraints );
     
    JButton button3 = new JButton( "button 3");
    GridBagConstraints button3Constraints = new GridBagConstraints();
    button3Constraints.gridx = 2;
    button3Constraints.gridy = 2;
    button3Constraints.gridwidth = 1;
    button3Constraints.gridheight = 1;
    add( button3, button3Constraints );
         
    JButton button4 = new JButton( "bottom 4");
    GridBagConstraints button4Constraints = new GridBagConstraints();
    button4Constraints.gridx = 3;
    button4Constraints.gridy = 2;
    button4Constraints.gridwidth = 1;
    button4Constraints.gridheight = 1;
    add( button4, button4Constraints );
        
    // Neue Zeile
    JButton button5 = new JButton( "button 5");
    GridBagConstraints button5Constraints = new GridBagConstraints();
    button5Constraints.gridx = 0;
    button5Constraints.gridy = 3;
    button5Constraints.gridwidth = 1;
    button5Constraints.gridheight = 1;
    add( button5, button5Constraints );
        
    JButton button6 = new JButton( "button 6");
    GridBagConstraints button6Constraints = new GridBagConstraints();
    button6Constraints.gridx = 1;
    button6Constraints.gridy = 3;
    button6Constraints.gridwidth = 1;
    button6Constraints.gridheight = 1;
    add( button6, button6Constraints );
        
    JButton button7 = new JButton( "button 7");
    GridBagConstraints button7Constraints = new GridBagConstraints();
    button7Constraints.gridx = 2;
    button7Constraints.gridy = 3;
    button7Constraints.gridwidth = 1;
    button7Constraints.gridheight = 1;
    add( button7, button7Constraints );
        
    JButton button8 = new JButton( "bottom 8");
    GridBagConstraints button8Constraints = new GridBagConstraints();
    button8Constraints.gridx = 3;
    button8Constraints.gridy = 3;
    button8Constraints.gridwidth = 1;
    button8Constraints.gridheight = 1;
    add( button8, button8Constraints );
    
    //Neue Zeile
    JButton sub = new JButton( "sub" );
    GridBagConstraints subConstraints = new GridBagConstraints();
    subConstraints.gridx = 0;
    subConstraints.gridy = 4;
    subConstraints.gridwidth = 4;
    subConstraints.gridheight = 1;
    subConstraints.fill = GridBagConstraints.HORIZONTAL;
    add( sub, subConstraints);       
         
    //Neue Zeile
    JButton textarea = new JButton( "textarea" );
    GridBagConstraints textareaConstraints = new GridBagConstraints();
    textareaConstraints.gridx = 0;
    textareaConstraints.gridy = 5;
    textareaConstraints.gridwidth = 4;
    textareaConstraints.gridheight = 1;
    textareaConstraints.fill = GridBagConstraints.HORIZONTAL;
    add( textarea,textareaConstraints); 
     
    //Neue Zeile
    JButton bar = new JButton( "bar" );
    GridBagConstraints barConstraints = new GridBagConstraints();
    barConstraints.gridx = 0;
    barConstraints.gridy = 6;
    barConstraints.gridwidth = 4;
    barConstraints.gridheight = 1;
    barConstraints.fill = GridBagConstraints.HORIZONTAL;
    add( bar,barConstraints); 
        
    //3Buttons in neuen Zeile
    JButton test1 = new JButton( "test1");
    GridBagConstraints test1Constraints = new GridBagConstraints();
    test1Constraints.gridx = 0;
    test1Constraints.gridy = 7;
    test1Constraints.gridwidth = 1;
    test1Constraints.gridheight = 1;
    test1Constraints.weightx = 1;
    test1Constraints.fill = GridBagConstraints.BOTH;
    panel.add( test1,test1Constraints);
    
    
    JButton test2 = new JButton( "test2");
    GridBagConstraints test2Constraints = new GridBagConstraints();
    test2Constraints.gridx = 1;
    test2Constraints.gridy = 7;
    test2Constraints.gridwidth = 1;
    test2Constraints.gridheight = 1;
    test2Constraints.weightx = 1;
    test2Constraints.fill = GridBagConstraints.BOTH;
    panel.add( test2,test2Constraints);  
    
    
    JButton test3 = new JButton( "test3");
    GridBagConstraints test3Constraints = new GridBagConstraints();
    test3Constraints.gridx = 2;
    test3Constraints.gridy = 7;
    test3Constraints.gridwidth = 1;
    test3Constraints.gridheight = 1;
    test3Constraints.weightx = 1;
    test3Constraints.fill = GridBagConstraints.BOTH;
    panel.add( test3,test3Constraints); 
     
    panel.setLayout(new GridBagLayout()); 
    GridBagConstraints panelConstraints = new GridBagConstraints();
    panelConstraints.gridx = 0;
    panelConstraints.gridy = 8;
    panelConstraints.gridwidth = 4;
    panelConstraints.gridheight = 1;
    panelConstraints.fill = GridBagConstraints.BOTH;    
    
    add(panel ,panelConstraints);       
     
    
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	     
    setVisible(true); 
    pack();
    
    }
	
	public static void main(String[] args)throws Exception
	{     
	      try             
	         { 
	          JFrame.setDefaultLookAndFeelDecorated(true);
	         }
	         catch (Exception e)
	         {
	           e.printStackTrace();
	         } 
	        
	         EventQueue.invokeLater(new Runnable()
	         {
	            public void run()
	            {        
	            try
	            {             
	               Window w = new MainWindow();
				w.setVisible(true);
				//AWTUtilities.setWindowOpacity(w, 0.5f);
	            }
	            catch (Exception e)
	            {            
	               e.printStackTrace();
	            }                      
	            }
	         });
	}
}
 
Zuletzt bearbeitet:
Das geht so nicht.
Du könntest dem Button zwar schon sagen, dass er sich über 4 Zeilen strecken soll.
Das bring aber nichts da ja sonst keine Compnenten in diesen Zeilen sind und somit würden diese 4 Zeilen einfach so dünn, dass der Button gerade noch darin platz hat.

Ich denke, da musst du wohl eine fixen Höhe setzten.
 
Das geht so nicht.
Du könntest dem Button zwar schon sagen, dass er sich über 4 Zeilen strecken soll.
Das bring aber nichts da ja sonst keine Compnenten in diesen Zeilen sind und somit würden diese 4 Zeilen einfach so dünn, dass der Button gerade noch darin platz hat.

Ich denke, da musst du wohl eine fixen Höhe setzten.

jetzt habe ich ein anderes Problem, wie resize ich die buttons auch in vertikaler Richtung?

ay8wrgdn5w7z2du9k.png


Code:
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Window;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainWindow extends JFrame
{

    private static final long serialVersionUID = 1L;
    private JPanel panel = new JPanel();
    
    public MainWindow()
    {
        
        
       setLayout(new GridBagLayout());

    JButton top = new JButton( "top" );
    GridBagConstraints topConstraints = new GridBagConstraints();
    topConstraints.gridx = 0;
    topConstraints.gridy = 0;
    topConstraints.gridwidth = 4;
    topConstraints.gridheight = 1; 
    topConstraints.weightx = 1;
    topConstraints.fill = GridBagConstraints.BOTH;
    add( top, topConstraints );
    
    JButton base = new JButton( "base" );
    GridBagConstraints baseConstraints = new GridBagConstraints();
    baseConstraints.gridx = 0;
    baseConstraints.gridy = 1;
    baseConstraints.gridwidth = 4;
    baseConstraints.gridheight = 1;
    baseConstraints.weightx = 1;
    baseConstraints.fill = GridBagConstraints.BOTH;
    add( base, baseConstraints);
    
    JButton button1 = new JButton( "button 1");
    GridBagConstraints button1Constraints = new GridBagConstraints();
    button1Constraints.gridx = 0;
    button1Constraints.gridy = 2;
    button1Constraints.gridwidth = 1;
    button1Constraints.gridheight = 1;
    button1Constraints.weightx = 1;
    button1Constraints.fill = GridBagConstraints.BOTH;
    add( button1, button1Constraints );
    
    JButton button2 = new JButton( "button 2");
    GridBagConstraints button2Constraints = new GridBagConstraints();
    button2Constraints.gridx = 1;
    button2Constraints.gridy = 2;
    button2Constraints.gridwidth = 1;
    button2Constraints.gridheight = 1;
    button2Constraints.weightx = 1;
    button2Constraints.fill = GridBagConstraints.BOTH; 
    add( button2, button2Constraints );
     
    JButton button3 = new JButton( "button 3");
    GridBagConstraints button3Constraints = new GridBagConstraints();
    button3Constraints.gridx = 2;
    button3Constraints.gridy = 2;
    button3Constraints.gridwidth = 1;
    button3Constraints.gridheight = 1;
    button3Constraints.weightx = 1;
    button3Constraints.fill = GridBagConstraints.BOTH;
    add( button3, button3Constraints );
         
    JButton button4 = new JButton( "bottom 4");
    GridBagConstraints button4Constraints = new GridBagConstraints();
    button4Constraints.gridx = 3;
    button4Constraints.gridy = 2;
    button4Constraints.gridwidth = 1;
    button4Constraints.gridheight = 1;
    button4Constraints.weightx = 1;
    button4Constraints.fill = GridBagConstraints.BOTH;
    add( button4, button4Constraints );
        
    // Neue Zeile
    JButton button5 = new JButton( "button 5");
    GridBagConstraints button5Constraints = new GridBagConstraints();
    button5Constraints.gridx = 0;
    button5Constraints.gridy = 3;
    button5Constraints.gridwidth = 1;
    button5Constraints.gridheight = 1;
    button5Constraints.weightx = 1;
    button5Constraints.fill = GridBagConstraints.BOTH;
    add( button5, button5Constraints );
        
    JButton button6 = new JButton( "button 6");
    GridBagConstraints button6Constraints = new GridBagConstraints();
    button6Constraints.gridx = 1;
    button6Constraints.gridy = 3;
    button6Constraints.gridwidth = 1;
    button6Constraints.gridheight = 1;
    button6Constraints.weightx = 1;
    button6Constraints.fill = GridBagConstraints.BOTH;
    add( button6, button6Constraints );
        
    JButton button7 = new JButton( "button 7");
    GridBagConstraints button7Constraints = new GridBagConstraints();
    button7Constraints.gridx = 2;
    button7Constraints.gridy = 3;
    button7Constraints.gridwidth = 1;
    button7Constraints.gridheight = 1;
    button7Constraints.weightx = 1;
    button7Constraints.fill = GridBagConstraints.BOTH;
    add( button7, button7Constraints );
        
    JButton button8 = new JButton( "bottom 8");
    GridBagConstraints button8Constraints = new GridBagConstraints();
    button8Constraints.gridx = 3;
    button8Constraints.gridy = 3;
    button8Constraints.gridwidth = 1;
    button8Constraints.gridheight = 1;
    button8Constraints.weightx = 1;
    button8Constraints.fill = GridBagConstraints.BOTH;
    add( button8, button8Constraints );
    
    //Neue Zeile
    JButton sub = new JButton( "sub" );
    GridBagConstraints subConstraints = new GridBagConstraints();
    subConstraints.gridx = 0;
    subConstraints.gridy = 4;
    subConstraints.gridwidth = 4;
    subConstraints.gridheight = 1;
    subConstraints.weightx = 1;
    subConstraints.fill = GridBagConstraints.BOTH;
    add( sub, subConstraints);       
         
    //Neue Zeile
    JButton textarea = new JButton( "textarea" );
    GridBagConstraints textareaConstraints = new GridBagConstraints();
    textareaConstraints.gridx = 0;
    textareaConstraints.gridy = 5;
    textareaConstraints.gridwidth = 4;
    textareaConstraints.gridheight = 1;
    textareaConstraints.ipady = 50;
    textareaConstraints.weightx = 1;
    textareaConstraints.fill = GridBagConstraints.BOTH;
    add( textarea,textareaConstraints); 
     
    //Neue Zeile
    JButton bar = new JButton( "bar" );
    GridBagConstraints barConstraints = new GridBagConstraints();
    barConstraints.gridx = 0;
    barConstraints.gridy = 6;
    barConstraints.gridwidth = 4;
    barConstraints.gridheight = 1;
    barConstraints.weightx = 1;
    barConstraints.fill = GridBagConstraints.BOTH;
    add( bar,barConstraints); 
        
    // Neues Layout setzen für die untersten 3 Komponenten
    panel.setLayout(new GridBagLayout()); 
    
    //3Buttons in neuen Zeile
    JButton test1 = new JButton( "test1");
    GridBagConstraints test1Constraints = new GridBagConstraints();
    test1Constraints.gridx = 0;
    test1Constraints.gridy = 7;
    test1Constraints.gridwidth = 1;
    test1Constraints.gridheight = 1;
    test1Constraints.weightx = 1;
    test1Constraints.fill = GridBagConstraints.BOTH;
    panel.add( test1,test1Constraints);
    
    
    JButton test2 = new JButton( "test2");
    GridBagConstraints test2Constraints = new GridBagConstraints();
    test2Constraints.gridx = 1;
    test2Constraints.gridy = 7;
    test2Constraints.gridwidth = 1;
    test2Constraints.gridheight = 1;
    test2Constraints.weightx = 1;
    test2Constraints.fill = GridBagConstraints.BOTH;
    panel.add( test2,test2Constraints);  
    
    
    JButton test3 = new JButton( "test3");
    GridBagConstraints test3Constraints = new GridBagConstraints();
    test3Constraints.gridx = 2;
    test3Constraints.gridy = 7;
    test3Constraints.gridwidth = 1;
    test3Constraints.gridheight = 1;
    test3Constraints.weightx = 1;
    test3Constraints.fill = GridBagConstraints.BOTH;
    panel.add( test3,test3Constraints);      
    
    GridBagConstraints panelConstraints = new GridBagConstraints();
    panelConstraints.gridx = 0;
    panelConstraints.gridy = 8;
    panelConstraints.gridwidth = 4;
    panelConstraints.gridheight = 1;
    panelConstraints.fill = GridBagConstraints.BOTH;    
    
    add(panel ,panelConstraints);       
     
    
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	     
    setVisible(true); 
    pack();
    
    }
	
	public static void main(String[] args)throws Exception
	{     
	      try             
	         { 
	          JFrame.setDefaultLookAndFeelDecorated(true);
	         }
	         catch (Exception e)
	         {
	           e.printStackTrace();
	         } 
	        
	         EventQueue.invokeLater(new Runnable()
	         {
	            public void run()
	            {        
	            try
	            {             
	               Window w = new MainWindow();
				w.setVisible(true);
				//AWTUtilities.setWindowOpacity(w, 0.5f);
	            }
	            catch (Exception e)
	            {            
	               e.printStackTrace();
	            }                      
	            }
	         });
	}
}
 
Wahrscheinlich wollte er dir eine IDE mit GUI Builder empfehlen.
Der hilft aber auch nur dann, wenn du weisst was du tust.

Ich nehme an du verwendest keinen GUI Editor. Dies finde ich eigentlich auch besser, denn so lernst du auch verstehen, was du machst und wie das Zeugs funktioniert.


Was genau willst du denn erreichen?
Ist das Ziel, dass wenn du das Fenster vergrösserst auch die Buttons grösser werden?

Sowas kannst du mit dem GridbagConstraint Attribut "weighty" erreichen.
Wenn du z.B nur bei einer Componente dieses Attribut auf "1" setzt, erhällt diese Componente den gesamten Platz (in y-Richtung), welcher noch zur Verfügung steht.
Wenn du dies bei mehreren Componenten machst, wird der Platz auf diese gleichmässig verteilt.

Ich empfehle dir aber dringend, dich mal mit den Grundlagen der Layouts zu befassen.
Das von dir verwendete GridbagLayout wird z.B. in der Insel (welches ich übrigens ein sehr gutes Buch um Java kennen zu lernen finde) recht gut erklärt:
http://www.galileocomputing.de/open...15_010.htm#mj14c3f4de321c854ce3a26fe249822f8f
 
Wahrscheinlich wollte er dir eine IDE mit GUI Builder empfehlen.
Der hilft aber auch nur dann, wenn du weisst was du tust.

Ich nehme an du verwendest keinen GUI Editor. Dies finde ich eigentlich auch besser, denn so lernst du auch verstehen, was du machst und wie das Zeugs funktioniert.


Was genau willst du denn erreichen?
Ist das Ziel, dass wenn du das Fenster vergrösserst auch die Buttons grösser werden?

Sowas kannst du mit dem GridbagConstraint Attribut "weighty" erreichen.
Wenn du z.B nur bei einer Componente dieses Attribut auf "1" setzt, erhällt diese Componente den gesamten Platz (in y-Richtung), welcher noch zur Verfügung steht.
Wenn du dies bei mehreren Componenten machst, wird der Platz auf diese gleichmässig verteilt.

Ich empfehle dir aber dringend, dich mal mit den Grundlagen der Layouts zu befassen.
Das von dir verwendete GridbagLayout wird z.B. in der Insel (welches ich übrigens ein sehr gutes Buch um Java kennen zu lernen finde) recht gut erklärt:
http://www.galileocomputing.de/open...15_010.htm#mj14c3f4de321c854ce3a26fe249822f8f

jede Komponente in meinem fenster soll sich Vergrößern, wenn der JFrame vergrößert wird. MIt den Grundlagen habe ichmich bereits auseinandergesetzt ;-) weighty habe ich auch probiert und auf 1.0 gesetzt passiert aber nichts will heißen der button mit weighty = 1.0; wird nicht in y-richtung resized?
 
Also wenn ich in deinem Beispiel z.B. dem Button "textarea" weighty auf 1 setzte, dann wird dieser in der y richtung gestreckt.
 
Zurück