GridBagLayout Falsche Größenanpassung

Webmaster Pazi

Aktives Mitglied
Hey Community!

Habe ein kleines Problem mit meinem GUI.

Folgender Code:

Java:
JFrame f = new JFrame("TestUI");
f.setSize(288,244);
f.setVisible(true);

f.setLayout(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();
		
		JScrollPane scrollpane_1 = new JScrollPane();
		c.fill = GridBagConstraints.BOTH;
		c.insets = new Insets(10,0,10,5);
		c.ipady = 110;
		c.weightx = 0.66;
		c.weighty = 3;
		c.gridx = 0;
		c.gridy = 0;
		f.add(scrollpane_1, c);
		
		JScrollPane scrollpane_2 = new JScrollPane();
		c.fill = GridBagConstraints.VERTICAL;
		c.insets = new Insets(10,5,10,0);
		c.ipady = 40;
		c.weightx = 0.33;
		c.weighty = 3;
		c.gridx = 1;
		c.gridy = 0;
		f.add(scrollpane_2, c);
		
		JTextField textfield_1 = new JTextField();
		c.fill = GridBagConstraints.HORIZONTAL;
		c.insets = new Insets(0,0,0,0);
		c.ipady = 0;
		c.weightx = 1;
		c.gridx = 0;
		c.gridwidth = 2;
		c.gridy = 1;
		f.add(textfield_1, c);

macht folgendes:

scrollpane_1 verhält sich so, wie es sein soll: bei einer vergrößerung des fensters horizontal und vertikal vergrößern.
scrollpane_2 sollte dagegen eine feste breite haben (das bekomme ich irgendwie nicht hin), das heißt, nur vertikal die größe verändern.
textfield_1 passt: größe nur horizontal ändern.

Der obige Code ergibt folgendes:
framedemo2.png


Sollte aber folgendes ergeben:
framedemo.png

(rechts) wenn der frame vergrößert wurde.

zudem besteht viel mehr, als angegebener abstand zwischen den objekten.
scrollpane_2 braucht unbedingt eine fixe breite und die höhe muss bei einer änderung der fenstergröße an die fensterhöhe angepasst werden.

Weiß jemand woran das liegt? Oder brauche ich da einen anderen layoutmanager dazu?
 
Zuletzt bearbeitet:
Für deine GUI gibt es mehrere Ansätze, die u.U. mehr können, als deine bisherige Lösung.
1. Möglichkeit: Die Verwendung von BorderLayout.
2. Die Verwendung eines JSplitPane.
3. Eine korrigierte Variante deiner Version mit GridBagLayout.

Hier die auf das Wesentliche reduzierte Varianten.

Java:
import java.awt.*;
import javax.swing.*;

public class BorderLayoutChatGUI  {
  private JTextArea ta;
  private JList li;
  private JTextField tf;
  
  public BorderLayoutChatGUI() {
    ta = new JTextArea();
    li = new JList();
    tf = new JTextField();
    
    JFrame f = new JFrame("BorderLayoutChatGUI");
    f.setLayout(new BorderLayout(5, 5));
    f.setSize(800, 600);
    f.setLocationByPlatform(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    f.add(new JScrollPane(ta), BorderLayout.CENTER);
    
    JScrollPane sp = new JScrollPane(li);
    sp.setPreferredSize(new Dimension(200, 0)); //Breite der Userlist festlegen
    f.add(sp, BorderLayout.EAST);
    
    f.add(tf, BorderLayout.SOUTH);
    
    f.setVisible(true);
  }
  
  public static void main(String[] args) {
    new BorderLayoutChatGUI();
  }
}


Java:
import java.awt.*;
import javax.swing.*;

public class SplitPaneChatGUI  {
  private JTextArea ta;
  private JList li;
  private JTextField tf;

  public SplitPaneChatGUI() {
    ta = new JTextArea();
    li = new JList();
    tf = new JTextField();

    JFrame f = new JFrame("SplitPaneChatGUI");
    f.setLayout(new BorderLayout(5, 5));
    f.setSize(800, 600);
    f.setLocationByPlatform(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JSplitPane sp = new JSplitPane();
    sp.setDividerLocation(f.getSize().width-200); //Startbreite der Userlist
    sp.setDividerSize(5);
    sp.setResizeWeight(1.0);
    sp.setLeftComponent(new JScrollPane(ta));
    sp.setRightComponent(new JScrollPane(li));

    f.add(sp, BorderLayout.CENTER);
    f.add(tf, BorderLayout.SOUTH);

    f.setVisible(true);
  }

  public static void main(String[] args) {
    new SplitPaneChatGUI();
  }
}


Java:
import java.awt.*;
import javax.swing.*;

public class GridBagLayoutChatGUI  {
  private JTextArea ta;
  private JList li;
  private JTextField tf;

  public GridBagLayoutChatGUI() {
    ta = new JTextArea();
    li = new JList();
    tf = new JTextField();

    JFrame f = new JFrame("GridBagLayoutChatGUI");
    f.setLayout(new GridBagLayout());
    f.setSize(800, 600);
    f.setLocationByPlatform(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    GridBagConstraints gbc = new GridBagConstraints();
    
    JScrollPane spta = new JScrollPane(ta);
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    gbc.insets = new Insets(0, 0, 0, 5);
    f.add(spta, gbc);
    
    JScrollPane spli = new JScrollPane(li);
    spli.setPreferredSize(new Dimension(200, 0));
    gbc.gridx = 1;
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.insets = new Insets(0, 0, 0, 0);
    f.add(spli, gbc);
    
    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.gridwidth = 2;
    gbc.insets = new Insets(5, 0, 0, 0);
    f.add(tf, gbc);

    f.setVisible(true);
  }

  public static void main(String[] args) {
    new GridBagLayoutChatGUI();
  }
}
 

Neue Themen


Zurück
Oben