Java GUI mit GridBagLayout

juligo

Mitglied
Hallo,
irgendwie habe ich ein Problem beim Erstellen meiner GUI.
So habe ich mir das eig. ungefähr vorgestellt:

pgkvrwcz.png


Und das ist was bei mir herauskommt:

oc7amamd.png


Ich versteh das nicht. Beim GridBagLayout kann ich doch eig. angeben wie groß die Objekte sein sollen, die ich auf meinem Frame platziere. Aber irgendwie nehmen die scheinbar immer noch die Standardgrößen der Komponenten an.

Hier mal mein Code:
Code:
package GUI;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

public class GUIBuild extends JFrame
{


	private static final long serialVersionUID = 1L;
	private JFrame jif;
	private JMenuBar mb;
	private Dimension screen = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
	public GUIBuild ()
	{
		
		jif=new JFrame();
	    jif.setTitle("Test");
		Container c = jif.getContentPane();
		GridBagLayout gbl = new GridBagLayout();
		c.setLayout(gbl);
			
		//Menü
	    mb = new JMenuBar();
	    JMenu t = new JMenu("Datei");
	    JMenu b = new JMenu("Bearbeiten");
	    JMenu h = new JMenu("Hilfe");
	    mb.add(t);
	    mb.add(b);
	    mb.add(h);
	    t.add(new JMenuItem ("Exportieren"));
	    t.add(new JMenuItem ("Beenden"));
	    b.add(new JMenuItem ("Bildschirm leeren"));
	    h.add(new JMenuItem ("Über das Programm") );
	    jif.setJMenuBar(mb);
	    

		jif.setExtendedState(JFrame.MAXIMIZED_BOTH); 
		jif.setVisible(true);
		jif.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		
		
	    JToolBar toolbar = new JToolBar();
	    ImageIcon bild1 = new ImageIcon("/home/julian/Desktop/icons/disconnect.png");
	    ImageIcon bild2 = new ImageIcon("/home/julian/Desktop/icons/disk.png");
	    ImageIcon bild3 = new ImageIcon("/home/julian/Desktop/icons/photo_add.png");
	    ImageIcon bild4 = new ImageIcon("/home/julian/Desktop/icons/pencil.png");
	    ImageIcon bild5 = new ImageIcon("/home/julian/Desktop/icons/printer.png");
	    ImageIcon bild6 = new ImageIcon("/home/julian/Desktop/icons/user_comment.png");
	    
	    toolbar.add( new JButton(bild1) );
	    toolbar.add( new JButton(bild2) );
	    toolbar.add( new JButton(bild3) );
	    toolbar.add( new JButton(bild4) );
	    toolbar.add( new JButton(bild5) );
	    toolbar.add( new JButton(bild6) );
	    
	    toolbar.addSeparator();
	  
        //                                             x  y  w  h  wx   hx	    
	    addComponent( c, gbl, toolbar,                 0, 0, 5, 1, 0.0, 0.0);
	    addComponent( c, gbl, createTree("Favoriten"), 0, 0, 1, 2, 0.0, 0.0);
	    addComponent( c, gbl, new JTextArea("daddadda"), 1, 1, 4, 3, 0.0, 0.0);
	    addComponent( c, gbl, createTree("Techniken"), 0, 3, 1, 3, 0.0, 0.0);
	    addComponent( c, gbl, new JTextArea("kdkdkdk2"), 1, 4, 4, 2, 0.0, 0.0);
	        

	    jif.setSize(screen);	
	    jif.setVisible( true );

	}

	private JTree createTree(String s)
	{
		DefaultMutableTreeNode root = new DefaultMutableTreeNode(s);
		
		for (int nodeCnt = 0; nodeCnt < 4; nodeCnt++)
		{
			DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode("Knoten"+nodeCnt);
			root.add(dmtn);
			
			for (int leafCnt=1; leafCnt<4; leafCnt++)
				dmtn.add(new DefaultMutableTreeNode("Blatt" + (nodeCnt*3 + leafCnt) ) );
			
		}
		return (new JTree(root));
	}
	             
	static void addComponent(Container cont, GridBagLayout gbl, Component c, int x, int y, int width, int height, double weightx, double weighty)
	{
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH; 
		gbc.gridx = x; 
		gbc.gridy = y;
		gbc.gridwidth = width; gbc.gridheight = height;
		gbc.weightx = weightx; gbc.weighty = weighty;
		gbl.setConstraints(c, gbc);
		cont.add(c);
	}

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

Wäre richtig gut, wenn mich jemand in die richtige Richtung lenken würde.
Und ist es sinnvoll swing und awt Elemente miteinander zu vermischen?

Danke u. Gruß
Julian
 

Marco13

Top Contributor
Die wx und hx geben an, wie zusätzlicher Platz aufgeteilt wird. Gib' da mal Werte !=0 ein.

AWT und Swing Components sollte man NICHT mischen, aber das machst du anscheindend auch nicht: Es geht wirklich nur um die Components (also z.B:
Button auf JPanel -> schlecht
JButton auf JPanel -> gut).
Sonstige AWT-Klassen kann (und muss) man natürlich weiterverwenden.
 

KrokoDiehl

Top Contributor
Hallo.
Zuerst einmal halte ich persönlich es für sinnvoller, wenn du deinen JFrame bei seinem Standard-BorderLayout belässt und in den CENTER-Bereich ein extra Panel legst, mit deinem GridBagLayout.
Damit kannst du die Toolbar ins NORTH legen und hast dann auch automatisch die Funktionalität, dass man die Toolbar auch nach links oder rechts verschieben kann.

Sprich:
Java:
    public GUIBuild()
    {
        super("Titel");
        // ...

        this.add( myToolbar, BorderLayout.NORTH );
        this.add( createCenter(), BorderLayout.CENTER );
    }

Außerdem darfst du im Konstruktor keinen neuen JFrame machen, weil deine Klasse GUIBuild bereits ein JFrame ist. Oder du machst es anders herum.

Zum zentralen Layout kannst du dir auch überlegen, mit JSplitPanes zu arbeiten, wenn du diese vier Bereiche verschiebbar haben willst? Dann spart man sich das Gefummel mit den GridBagContraints und es ist vllt benutzerfreundlicher :)

Ansonsten sind hier die "wichtigsten" Eigenschaften einer GridBagConstraint:
Code:
gridx
: Spaltennummer wo Komponente anfängt
Code:
gridy
: Zeilennummer wo Komponente anfängt
Code:
gridwidth
: Breite (in Spalten) der Komponente
Code:
gridheight
: analog
Code:
weightx
: Vergrößerung in Horizontale, muss zw. 0.0 und 1.0 liegen. 1.0 bedeutet, dass beim Verbreitern des Fensters diese Komponente den gesamten neuen (horizontalen) Platz einnimmt. 0.0 bedeutet dann analog, dass sie sich nicht mitvergrößert
Code:
weighty
: Analog zu weightx. Bitte beachten, dass in einer Zeile die Summer aller weightx 1.0 sein sollte und in einer Spalte alle weighty 1.0.
Code:
anchor
: Ausrichtung innerhalb der GridBag-Zelle, meistens BASELINE_LEADING, wenn sie vorne anfangen soll. Ansonsten geht auch CENTER oder BASELINE_TRAINING für Rechtsbündigkeit. Je nachdem, was man will.
Code:
fill
: Nochmal eine Angabe zum Vergrößerungsverhalten. NONE heißt, dass die Komponente sich nicht mit vergrößert, HORIZONTAL, dass sich sich nur horizonal vergrößert. Analog sind VERTICAL und BOTH.

Meine Erfahrung mit GBL ist, dass man mit den einzelnen Angaben oft ausprobieren muss, bis man das hat, was man will :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Für Java-Spezialisten AWT, Swing, JavaFX & SWT 4
Juelin Java <-> Delphi AWT, Swing, JavaFX & SWT 3
H Exceptions seit java: 1.6.0_65 Umstellung AWT, Swing, JavaFX & SWT 3
H Exception: java.lang.ClassCastException AWT, Swing, JavaFX & SWT 2
M JavaFX java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found AWT, Swing, JavaFX & SWT 5
J Java GUI Dropdown-Menü anzeigen AWT, Swing, JavaFX & SWT 5
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
W Kennt jemand Dear ImGui (und den Java-Wrapper dazu)? AWT, Swing, JavaFX & SWT 0
B Java Projekt mit JavaFX und jfoenix ausführbar machen AWT, Swing, JavaFX & SWT 46
D JAVA Schieberegler AWT, Swing, JavaFX & SWT 6
N JavaFX Einfacher Taschenrechner mit Scene Builder und Java FX AWT, Swing, JavaFX & SWT 0
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
P Fehlermeldung: Error: Could not find or load main class set Caused by: java.lang.ClassNotFoundException: set AWT, Swing, JavaFX & SWT 5
Encera Java FX im Eclipse-Marketplace nichtmehr auffindbar AWT, Swing, JavaFX & SWT 6
_user_q Versionscode aus build.gradle in Java-Klasse ausgeben lassen AWT, Swing, JavaFX & SWT 14
M Java Dateien kopieren mit Fortschrittsbalken AWT, Swing, JavaFX & SWT 13
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
E 3D-Grafik Java Fatal error bei LWJGL AWT, Swing, JavaFX & SWT 2
Heldderschatten Java Events und Interfaces AWT, Swing, JavaFX & SWT 18
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
U Warum wird zweimal die Affinetransformation estellt (2Dgraphics, Java)? AWT, Swing, JavaFX & SWT 31
U was bewirkt die methode fill und unterschied zu anderen fill Methoden in 2dgraphics? (Java)? AWT, Swing, JavaFX & SWT 6
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
Yonnig Lokale HTML-Datei in Java GUI rendern AWT, Swing, JavaFX & SWT 4
E Java-TexturePaint sehr langsam AWT, Swing, JavaFX & SWT 9
N Java MySQL Datenbank durchsuchen? AWT, Swing, JavaFX & SWT 7
maximstein JavaFX WebView - java.lang.NoSuchMethodError: 'boolean com.sun.prism.ResourceFactory.isDisposed()' AWT, Swing, JavaFX & SWT 4
Splayfer Custom Font in AttributedString Java AWT, Swing, JavaFX & SWT 4
imawake Java Paket-Tracking Programm 📦 AWT, Swing, JavaFX & SWT 7
izoards *.doc Seitenränder per Java setzen... AWT, Swing, JavaFX & SWT 14
T FXML Datei in Java Code einbinden: javafx.fxml.LoadException AWT, Swing, JavaFX & SWT 2
J Key-Listener in Java AWT, Swing, JavaFX & SWT 37
J Java Datei durch CMD mit Parameter ausführen AWT, Swing, JavaFX & SWT 1
N Java Mouse Listiner macht alles zusammen AWT, Swing, JavaFX & SWT 4
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
M Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found AWT, Swing, JavaFX & SWT 14
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
T Swing DPI-Skalierung und Java 2D unter Java 11 (und Windows 10) AWT, Swing, JavaFX & SWT 2
J Spiel mit Java AWT, Swing, JavaFX & SWT 9
I AWT java.awt.FileDialog - "coffee cup"-Icon lässt sich nicht ersetzen AWT, Swing, JavaFX & SWT 14
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
izoards Java FX Window Event SHOWING AWT, Swing, JavaFX & SWT 17
N FXMLLoader.load java.lang.RuntimeException: Gradle AWT, Swing, JavaFX & SWT 2
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
dtr84 JavaFX/OpenJFX mittels Apache Ivy einbinden (Java 11) AWT, Swing, JavaFX & SWT 18
M Jogl und Java 3d AWT, Swing, JavaFX & SWT 0
S0PEX JavaFX Java 8 auf 15 migrieren OpenJFX mit Gradle eingebunden, jedoch nicht gefunden !? AWT, Swing, JavaFX & SWT 4
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
V Java-Zeichenfeld mit AWT AWT, Swing, JavaFX & SWT 3
N java Gui friert scheinbar zufällig ein AWT, Swing, JavaFX & SWT 5
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
P Java Fx einrichten AWT, Swing, JavaFX & SWT 2
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
S JavaFX Java Custom Node Grafik zurückgeben AWT, Swing, JavaFX & SWT 2
MiMa Java und JavaFX 13 läuft endlich AWT, Swing, JavaFX & SWT 4
N eclipse Java, bilder benutzten Funktioniert nicht AWT, Swing, JavaFX & SWT 6
Trèfle Ausklappbare Diagramme in Java AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
K JAVA FX Constraints AWT, Swing, JavaFX & SWT 2
F Java FX und webcam AWT, Swing, JavaFX & SWT 1
T Wie kann man in java aufwendige grafiken programmieren AWT, Swing, JavaFX & SWT 1
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
J Java SWT Tabelleninhalt formattieren AWT, Swing, JavaFX & SWT 10
Blender3D Falsche Werte mit Java Toolkit Screensize AWT, Swing, JavaFX & SWT 4
K Swing AWT-EventQueue-1 java.lang.NoClassDefFoundError bei setVisible(true) AWT, Swing, JavaFX & SWT 3
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
I Java Bildfarbe ändern wie bei Photoshop AWT, Swing, JavaFX & SWT 9
R JavaFX Java FXML Vererbung in Klassen AWT, Swing, JavaFX & SWT 9
T Java: Zwei abhängige JSlider machen nicht das, was sie sollen AWT, Swing, JavaFX & SWT 4
J Parallele Aktionen in Java FX richtig durchführen. AWT, Swing, JavaFX & SWT 5
Neumi5694 java.awt.Window nach javafx.stage.Window AWT, Swing, JavaFX & SWT 1
M JavaFX java.lang.IllegalStateException: Location is not set. AWT, Swing, JavaFX & SWT 9
L Java- CardLayout AWT, Swing, JavaFX & SWT 10
M Java zeichnet nicht pixelgenau AWT, Swing, JavaFX & SWT 40
B Swing Eclipse is running under 0, but this Java project has a 1.6 Java compliance level, so WindowBuilder AWT, Swing, JavaFX & SWT 2
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
S Java Gui AWT, Swing, JavaFX & SWT 5
R Sierpinski Dreieck mit Java FX AWT, Swing, JavaFX & SWT 4
Flynn java.lang.UnsupportedOperationException: Not supported yet AWT, Swing, JavaFX & SWT 7
D Zwei getrennte Java Klassen verbinden. Wie ? AWT, Swing, JavaFX & SWT 2
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
N Aktualisierung des Fensters AWT Java ohne Ruckeln AWT, Swing, JavaFX & SWT 3
MiMa Java, Maven Projekte nach JavaFX? AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L java.lang.NullPointerException - Fehlermeldung AWT, Swing, JavaFX & SWT 2
D Swing Java JComboBox Example AWT, Swing, JavaFX & SWT 16
J AWT System Farben / java.awt.SystemColor funktioniert nicht AWT, Swing, JavaFX & SWT 4
MiMa Java Projekt nach JavaFX convertieren AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben