Angehängtes Layout, aber wie?

editOr

Mitglied
Hallo

Ich bin mir gerade am Überlegen wie ich angehängtes Layout erreichen kann. Das Problem besteht darin, dass ich nicht weiss, wie ich die beiden kleinen Buttons (auf der gleichen Höhe) wie die grossen platzieren kann, dass die grossen Buttons weiterhin zentriert sind.

Kann mir da jemand einen Gedankenanstoss liefern?


Besten Dank,
editor
 

Anhänge

  • bsp.png
    bsp.png
    3,1 KB · Aufrufe: 52

Fab1

Top Contributor
Hallo,

ich hätte folgende Lösung anzubieten.

Grundsätzlich eine eher wirre Verschachtelung von Panels mithilfe von Grid-, Border- und FlowLayout.

Aber das Ergebnis wäre wie auf deinem Bild.

Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.*;


public class Gui {

	void los(){
		
		JFrame f = new JFrame();
		f.setSize(800, 600);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLocationByPlatform(true);
		
		// Panel erzeugen
		JPanel northPanel = new JPanel();
		JPanel centerPanel = new JPanel();
		JPanel leftPanel = new JPanel();
		JPanel middlePanel = new JPanel();
		JPanel rightPanel = new JPanel();
		JPanel innerRightPanel = new JPanel();
		
		// Obere und untere Panel hinzufügen
		f.add(BorderLayout.CENTER, centerPanel);
		f.add(BorderLayout.NORTH, northPanel);
		
		northPanel.setLayout(new GridLayout());
		// 3 Panel beim oberen Panel hinzufügen
		northPanel.add(leftPanel);
		northPanel.add(middlePanel);
		northPanel.add(rightPanel);
		
		JButton bigButton1 = new JButton("BigButton1");
		JButton bigButton2 = new JButton("BigButton2");
		bigButton1.setPreferredSize(new Dimension(100,100));
		bigButton2.setPreferredSize(new Dimension(100,100));
		
		middlePanel.add(bigButton1);
		middlePanel.add(bigButton2);

		JButton smallButton1 = new JButton("SmallButton1");
		JButton smallButton2 = new JButton("SmallButton2");
		
		rightPanel.setLayout(new BorderLayout());
		rightPanel.add(BorderLayout.SOUTH, innerRightPanel);
		innerRightPanel.add(smallButton1);
		innerRightPanel.add(smallButton2);
		
		f.setVisible(true);
		
	}
}
 

editOr

Mitglied
Vielen Dank

Ein Problem das bei dieser Variante auftaucht ist, dass, wenn ich nun mehr als nur 2 Grosse Buttons verwende sagen wir 6 Stk, durch das GridLayout alle 3 Bereiche gleich breit sein müssen. Der Versuch, deshalb das Gridlayout durch ein BorderLayout zu ersetzen scheitert daran, dass das "West" Panel leer ist und daher die Zentrierung kaputt geht.

Mit GridBagLayout sollte das wohl gehen, wobei ich dann das relative Gewicht für die Breite wohl jeweils berechnen müsste, frage mich, obs auch einfacher geht. Bin froh um Inputs, wenn dem so ist.

Besten Dank
editOr
 
Zuletzt bearbeitet:

editOr

Mitglied
Vielen Dank für die Hinweise

Leider schaffe ich es auch mit dem GridBagLayout nicht. Folgender Code liefert leider nicht das gewünschte Ergebnis.

Warum ist das leftPanel hier kleiner als das rightPanel trotz gleicher weightx?


Code:
import java.awt.BorderLayout;
 
public class Gui {
 
    static void los(){
        
        JFrame f = new JFrame();
               
        f.setSize(800, 600);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationByPlatform(true);
        
        // Panel erzeugen
        JPanel northPanel = new JPanel();
        JPanel centerPanel = new JPanel();
        JPanel leftPanel = new JPanel();
        JPanel middlePanel = new JPanel();
        JPanel rightPanel = new JPanel();
        JPanel innerRightPanel = new JPanel();
        
        // Obere und untere Panel hinzufügen
        f.add(BorderLayout.CENTER, centerPanel);
        f.add(BorderLayout.NORTH, northPanel);
        
        Border border = BorderFactory.createLineBorder(Color.RED);
        leftPanel.setBorder(border);
        middlePanel.setBorder(border);
        rightPanel.setBorder(border);

        
        northPanel.setLayout(new GridBagLayout());
        // 3 Panel beim oberen Panel hinzufügen
        
        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.BOTH;
        c.weightx=0.2;
        northPanel.add(leftPanel, c);
        
        c.weightx=0.6;
        northPanel.add(middlePanel, c);
        
        c.weightx=0.2;
        northPanel.add(rightPanel, c);
        
        JButton bigButton1 = new JButton("BigButton1");
        JButton bigButton2 = new JButton("BigButton2");
        bigButton1.setPreferredSize(new Dimension(100,100));
        bigButton2.setPreferredSize(new Dimension(100,100));
        
        middlePanel.add(bigButton1);
        middlePanel.add(bigButton2);
 
        JButton smallButton1 = new JButton("SmallButton1");
        JButton smallButton2 = new JButton("SmallButton2");
        
        rightPanel.setLayout(new BorderLayout());
        rightPanel.add(BorderLayout.SOUTH, innerRightPanel);
        innerRightPanel.add(smallButton1);
        innerRightPanel.add(smallButton2);
        
        f.setVisible(true);
        
    }
    
    public static void main(String[] args) {
		Gui.los();
	}
}
 

editOr

Mitglied
Steh grad aufm Schlauch. Was meinst du damit?

Setzen von gridx und gridy führt leider auch nicht zum erfolg.

Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;
 
public class Gui {
 
    static void los(){
        
        JFrame f = new JFrame();
               
        f.setSize(800, 600);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationByPlatform(true);
        
        // Panel erzeugen
        JPanel northPanel = new JPanel();
        JPanel centerPanel = new JPanel();
        JPanel leftPanel = new JPanel();
        JPanel middlePanel = new JPanel();
        JPanel rightPanel = new JPanel();
        JPanel innerRightPanel = new JPanel();
        
        // Obere und untere Panel hinzufügen
        f.add(BorderLayout.CENTER, centerPanel);
        f.add(BorderLayout.NORTH, northPanel);
        
        Border border = BorderFactory.createLineBorder(Color.RED);
        leftPanel.setBorder(border);
        middlePanel.setBorder(border);
        rightPanel.setBorder(border);

        
        northPanel.setLayout(new GridBagLayout());
        // 3 Panel beim oberen Panel hinzufügen
        
        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.BOTH;
        c.weightx=0.2;
        c.gridx = 0;
        c.gridy = 0;
        northPanel.add(leftPanel, c);
        
        c.weightx=0.6;
        c.gridx = 1;
        c.gridy = 0;
        northPanel.add(middlePanel, c);
        
        c.weightx=0.2;
        c.gridx = 2;
        c.gridy = 0;
        
        northPanel.add(rightPanel, c);
        
        JButton bigButton1 = new JButton("BigButton1");
        JButton bigButton2 = new JButton("BigButton2");
        bigButton1.setPreferredSize(new Dimension(100,100));
        bigButton2.setPreferredSize(new Dimension(100,100));
        
        middlePanel.add(bigButton1);
        middlePanel.add(bigButton2);
 
        JButton smallButton1 = new JButton("SmallButton1");
        JButton smallButton2 = new JButton("SmallButton2");
        
        rightPanel.setLayout(new BorderLayout());
        rightPanel.add(BorderLayout.SOUTH, innerRightPanel);
        innerRightPanel.add(smallButton1);
        innerRightPanel.add(smallButton2);
        
        f.setVisible(true);
        
    }
    
    public static void main(String[] args) {
		Gui.los();
	}
}
 

editOr

Mitglied
Habe mir den betroffenen Teil in der FAQ nun zu Gemüte geführt, kann aber leider keine Lösung für das Problem entdecken...

Möglicherweise hat es mit dem hier zu tun.

Auch schön zu sehen ist, wie das GridBagLayout diese Einstellung umgehen kann wenn es Platzprobleme gibt. Dann versucht das GridBagLayout jeder Component zumindest eine minimale Grösse zu geben:

Allerdings besteht das Problem auch, wenn das Fenster gross ist und die Minimalgrösse kein Problem sein sollte.

Wäre froh um weitere Hinweise.
 

L-ectron-X

Gesperrter Benutzer
Das ist richtig, aber sowas wird im Allgemeinen nicht gemacht.

Lösungsvariante:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import java.awt.event.*;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;

public class Gui implements ComponentListener {
    private JPanel leftPanel, rightPanel;

    public Gui(){

        JFrame f = new JFrame();
        f.addComponentListener(this);

        f.setSize(800, 600);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationByPlatform(true);

        // Panel erzeugen
        JPanel northPanel = new JPanel();
        JPanel centerPanel = new JPanel();
        leftPanel = new JPanel();
        JPanel middlePanel = new JPanel();
        rightPanel = new JPanel();
        JPanel innerRightPanel = new JPanel();

        // Obere und untere Panel hinzufügen
        f.add(BorderLayout.CENTER, centerPanel);
        f.add(BorderLayout.NORTH, northPanel);

        Border border = BorderFactory.createLineBorder(Color.RED);
        leftPanel.setBorder(border);
        middlePanel.setBorder(border);
        rightPanel.setBorder(border);


        northPanel.setLayout(new GridBagLayout());
        // 3 Panel beim oberen Panel hinzufügen

        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.BOTH;
        c.weightx=0.2;
        c.gridx = 0;
        c.gridy = 0;
        northPanel.add(leftPanel, c);

        c.weightx=0.6;
        c.gridx = 1;
        c.gridy = 0;
        northPanel.add(middlePanel, c);

        c.weightx=0.2;
        c.gridx = 2;
        c.gridy = 0;

        northPanel.add(rightPanel, c);

        JButton bigButton1 = new JButton("BigButton1");
        JButton bigButton2 = new JButton("BigButton2");
        bigButton1.setPreferredSize(new Dimension(100,100));
        bigButton2.setPreferredSize(new Dimension(100,100));

        middlePanel.add(bigButton1);
        middlePanel.add(bigButton2);

        JButton smallButton1 = new JButton("SmallButton1");
        JButton smallButton2 = new JButton("SmallButton2");

        rightPanel.setLayout(new BorderLayout());
        rightPanel.add(BorderLayout.SOUTH, innerRightPanel);
        innerRightPanel.add(smallButton1);
        innerRightPanel.add(smallButton2);

        adjustPanel();
        f.setVisible(true);

    }
    
    public void componentHidden(ComponentEvent e) {

    }
    
    public void componentShown(ComponentEvent e) {

    }
    
    public void componentMoved(ComponentEvent e) {

    }
    
    public void componentResized(ComponentEvent e) {
        adjustPanel();
    }
    
    private void adjustPanel() {
        leftPanel.setPreferredSize(rightPanel.getPreferredSize());
    }

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

Allerdings weiß ich nicht, ob diese deinen Ansprüchen genügt.
 

mla.rue

Bekanntes Mitglied
Java:
javax.swing.Box.Filler

das gibts ja noch, wird sowas auch "allgemein" nicht gemacht? Wenn nicht, wozu gibts das überhaupt?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
S Layout - Problem AWT, Swing, JavaFX & SWT 1
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
R Layered Layout AWT, Swing, JavaFX & SWT 1
E showAndWait is not allowed during animation or layout processing Memory FX AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
S Kann javafx.scene.layout.VBoxBuilder nicht importieren AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
I JavaFX - festes Layout AWT, Swing, JavaFX & SWT 1
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
kilopack15 Interface mit Layout verknüpfen AWT, Swing, JavaFX & SWT 2
Y Layout/Ausrichtungsprobleme AWT, Swing, JavaFX & SWT 4
T JavaFX Custom Layout AWT, Swing, JavaFX & SWT 5
A GUI Layout AWT, Swing, JavaFX & SWT 11
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
L wie Layout-Grid in JXPanel anzeigen? AWT, Swing, JavaFX & SWT 5
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
Soloeco LayoutManager Wie und welches Layout nutze ich am Besten? AWT, Swing, JavaFX & SWT 13
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout reagiert nicht auf Constraints AWT, Swing, JavaFX & SWT 4
IsSchoGuat LayoutManager Layout-Containergrösse AWT, Swing, JavaFX & SWT 4
F GridBag Layout AWT, Swing, JavaFX & SWT 1
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
J ComboBoxModel addElement verändert Layout AWT, Swing, JavaFX & SWT 8
E Probelm mit Layout AWT, Swing, JavaFX & SWT 1
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
P Tipps für GUI-Layout AWT, Swing, JavaFX & SWT 2
M Passender Layout-Manager AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout zur Laufzeit ändern AWT, Swing, JavaFX & SWT 8
N Swing Zweifarbiges Layout für den Filechooser AWT, Swing, JavaFX & SWT 12
B LayoutManager Card Layout AWT, Swing, JavaFX & SWT 2
1 Eigenes Layout schreiben AWT, Swing, JavaFX & SWT 4
B SWT layout invalidieren in SWT? AWT, Swing, JavaFX & SWT 4
R Welchen Layout Manager/ Wie strukturieren? AWT, Swing, JavaFX & SWT 14
J Layout: oben 20% unten 80% AWT, Swing, JavaFX & SWT 12
T Layout für Listendarstellung AWT, Swing, JavaFX & SWT 3
F LayoutManager Null-Layout unter Linux im TreeCellEditor AWT, Swing, JavaFX & SWT 3
K Eclipse Layout (Gimp Layout, Tiled Layout...) AWT, Swing, JavaFX & SWT 4
C LayoutManager Passendes Layout gesucht AWT, Swing, JavaFX & SWT 2
M Layout funktioniert nicht AWT, Swing, JavaFX & SWT 3
dzim Layout von Panes in JFX2 AWT, Swing, JavaFX & SWT 17
H Layout Idee AWT, Swing, JavaFX & SWT 8
M Swing Dynamisches Layout AWT, Swing, JavaFX & SWT 10
P Swing welchen Layout Manager verwenden AWT, Swing, JavaFX & SWT 9
J LayoutManager Komponentenaustausch zerschießt Layout AWT, Swing, JavaFX & SWT 4
F Layout-Problem AWT, Swing, JavaFX & SWT 2
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
B Anderen Layout-Manager verwenden AWT, Swing, JavaFX & SWT 17
E Null-Layout - Wie geht es ohne? AWT, Swing, JavaFX & SWT 19
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
D Bild in JPanel verschiebt Layout. Wie fixieren? AWT, Swing, JavaFX & SWT 9
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
D Problem mit 3-Spalten Layout AWT, Swing, JavaFX & SWT 17
ARadauer Wenig Material zum Thema: Design, Layout, Usability von Swing Anwendungen AWT, Swing, JavaFX & SWT 11
S LayoutManager Welcher LayoutManager für dieses zweispaltige Layout? AWT, Swing, JavaFX & SWT 13
G LayoutManager Layout welches von Links nach rechts anordnet mit TOP Alignment! AWT, Swing, JavaFX & SWT 5
A Best practice für konkretes Layout AWT, Swing, JavaFX & SWT 10
G LayoutManager Layout für Spalten AWT, Swing, JavaFX & SWT 8
A Layout/JPanelgröße AWT, Swing, JavaFX & SWT 6
S pack() bei null-Layout AWT, Swing, JavaFX & SWT 10
C SWT Tabellen-Layout in StyledText? AWT, Swing, JavaFX & SWT 6
J LayoutManager Welchen Layout/Design-Manager? AWT, Swing, JavaFX & SWT 4
R Swing Layout setzen AWT, Swing, JavaFX & SWT 3
L Layout automatische Anpassung umgehen? AWT, Swing, JavaFX & SWT 5
A Problem mit Layout-Manager AWT, Swing, JavaFX & SWT 11
J Button Layout anpassen AWT, Swing, JavaFX & SWT 22
H LayoutManager Layout mit GridBagLayout machbar? AWT, Swing, JavaFX & SWT 6
B Buttongröße im Layout AWT, Swing, JavaFX & SWT 4
B LayoutManager Layout Problem AWT, Swing, JavaFX & SWT 14
O LayoutManager Layout entwerfen AWT, Swing, JavaFX & SWT 3
A diverse Layout-Fragen AWT, Swing, JavaFX & SWT 4
F LayoutManager Eigenes Layout die Lösung?! AWT, Swing, JavaFX & SWT 4
dzim SWT Layout mit Sections aus Eclipse Forms AWT, Swing, JavaFX & SWT 17
F JScrollPane verwirft Layout von JPanel AWT, Swing, JavaFX & SWT 2
C LayoutManager Layout und vergrößern des Frames AWT, Swing, JavaFX & SWT 5
E Swing Runde Buttons / Position eines Obj. im Layout AWT, Swing, JavaFX & SWT 7
S Swing UI-Elemente ordnen sich ungewollt in einer Reihe (ohne Layout) AWT, Swing, JavaFX & SWT 5
A Ungewollte Layout änderungen AWT, Swing, JavaFX & SWT 3
A Suche: Eclipse-GUI-Layout AWT, Swing, JavaFX & SWT 5
E JPanel mit Null Layout entfernt Buttons AWT, Swing, JavaFX & SWT 11
N Swing Layout positionieren AWT, Swing, JavaFX & SWT 2
B Methode setzt nicht das Layout in einer if-Abfrage AWT, Swing, JavaFX & SWT 13
H LayoutManager Dynamisches Layout AWT, Swing, JavaFX & SWT 3
M SWT Breite von Textfeld nur ohne Layout änderbar AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben