LayoutManager Bei verkleinern des Fensters, verschieben sich JPanels übereinander.

ConzT

Mitglied
Hi Leute,

da ich für die Uni bis Ende nächstes Semester ein Programm(Graphentheorie) mit GUI programmieren müssen und wir GUI's bis jetzt noch gelernt haben habe ich vorgestern beschlossen mir Swing mal selbst näher zu bringen... Läuft bis jetzt nicht so schlecht und macht Spaß :) Zumindest kann ich meine Matritzen so darstellen wie ich es mir vorstelle(Naja Größe werde ich noch anpassen).

Ich habe nun ein Problem bei mehreren JPanels in einem Frame.

Ich verwende für die Darstellung der Komponenten den LayoutManager GridBagLayout.
Die Matritzen erstelle ich in einem JPanel(JToggleButtons in einem GridLayout) und positioniere eine Links Oben im Eck(FIRST_LINE_START) , die Zweite in der Mitte(PAGE_START) und die dritte rechts oben im Eck(FIRST_LINE_END).

Für die Ausgabe diverser Berechnungen habe ich unten(PAGE_END / Horizontal(damit sie sich über die ganze Breite streckt) noch eine JTextArea.


Mein Problem nun. Wenn ich das Fenster verkleinere, werden die Matritzen in der Mitte und die rechts oben im Eck unter die Matritze im linken oberen Eck geschoben. Dies würde ich gerne verhindern.
Die JTextArea verschiebt sich über die Matritzen wenn ich das Fenster nach obenhin verkleinere.

Siehe Screenshots...


Habe zwar googel gefragt aber nicht annähernd einen Lösungsansatz gefunden. Evtl. sollte ich das auch noch lernen ;-)

Wäre super wenn ihr mir helfen könnt wie ich das Problem löse(Keine ganze Lösung sondern einen Ansatz oder wonach ich googeln soll ;-) )



Anbei der Code der Methode in der ich das Layout zusammenbastle und ein paar Screenshots:

Danke schon Mal!


Ps1: Screenshots muss ich erst online laden, kommen gleich
Ps2: Gerne auch Kritik zur Struktur des Codes gewünscht(Da fehlts mir noch bisschen an sinvollem und "schönem" aufbau ;-)

Code:
public void init(int dimension, int[][] array) {
            JFrame frame = new JFrame("Graph Program v.0.1.2");
            menubar = new JMenuBar();
            menu= new JMenu("Menü");
            menubar.add(menu);
            frame.setJMenuBar(menubar);
          
          
            GridBagConstraints c = new GridBagConstraints();
            frame.getContentPane().setLayout(new GridBagLayout());
          
            //Größe des Frames berechnen und festlegen
            t = Toolkit.getDefaultToolkit();
            Dimension d = t.getScreenSize();
            int height = (int) d.getHeight()-30;
            int width = (int) d.getWidth();
          
            frame.setSize(width, height);
            //Init Container und panel für Adjazenzmatrix erstellen
            inhalt = frame.getContentPane();
            inhalt.setBackground(Color.DARK_GRAY);
          
          
          
          
            // Panel, adjazenzmatrix dem Container hinzufügen und positionieren
            JPanel p = new JPanel();
            p = createGridPanelAdjazenzmatrice(dimension, array);
            c.anchor = GridBagConstraints.FIRST_LINE_START;
            c.gridx = 0;
            c.gridy = 0;
            c.weightx = 1;
            c.weighty = 1;
            inhalt.add(p, c);
          
            //Panel, wegmatrix dem Container hinzufuegen und positionieren
          
            JPanel p2 = new JPanel();
            p2 = createGridPanelWaymatrice(dimension, array);
            c.anchor = GridBagConstraints.PAGE_START;
            c.gridx = 0;
            c.gridy = 0;
            c.weightx = 1;
            c.weighty = 1;
            inhalt.add(p2, c);
          
            JPanel p3 = new JPanel();
            p3 = createGridPanelDistancematrix(dimension, array);
          
            c.anchor = GridBagConstraints.FIRST_LINE_END;
            c.gridx = 0;
            c.gridy = 0;
            c.weightx = 1;
            c.weighty = 1;
            inhalt.add(p3, c);
          
            //TextFenster erstellen und einbinden
            JPanel p4 = new JPanel();
            p4.setLayout(new BorderLayout());
            c.gridwidth = GridBagConstraints.RELATIVE;
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 5;
            c.weightx = 0;
            c.weighty = 0;
            c.ipady = 500;
          
          
            textWindow = new JTextArea();
            textWindow.setBorder(new LineBorder(Color.GREEN));
            scrollpane = new JScrollPane(textWindow);
            scrollpane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            p4.add(scrollpane,BorderLayout.CENTER);
            inhalt.add(p4,c);
          
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }


snap20160201ty2snci68h.png


snap20160201z18s5itno0.png



snap20160201y7e68mpxk0.png
 

Steven Hachel

Bekanntes Mitglied
Sich evtl. mit einem besseren (subjektiv) LayoutManager anfreunden? :)
Kann das hier (JGoodies) empfehlen, da die von JDK angeboteten mir so gar nicht gefallen. ^^
Library kann über das MVN Repo bezogen werden.

viele Grüße
Steven
 

ConzT

Mitglied
Hab nur drübergeschaut. Aber ich sehe da nirgens eine Angabe vom anchor PAGE_END. Vielleicht hilft das ja schon.
Danke für eure Tipps! Den anchor habe ich der TextArea hinzugefügt, ändert sich aber nichts an der darstellung :/

@ Steven, Das wäre natürlich auch ne Möglichkeit. Werde es mir mal ansehen! Habe halt die von JDK angeboteten zuerst gefunden^^
 

X5-599

Top Contributor
Das GridBagLayout hat allerdings auch ein Grid System. Du schiebst aber deine Panels alle an dieselbe Koordinate. Darum schieben sie sich übereinander beim Verkleinern. Wenn du das verhindern möchtest, musst du einfach jedes Panel in seine eigene Koordinate packen. gridx=0, gridx=1, gridx=2.
Dann kann man weiter mit den weightx/y spielen. Wenn ich mich recht erinnere, regelt dieser Wert , wer wieviel des vorhandenen Platzes bekommt. weightx=0.3 wären dann z.B. 30%. Man möge mich verbessern, wenn das falsch ist.

Wie wäre das hier?
Code:
public void init(int dimension, int[][] array) {
    JFrame frame = new JFrame("Graph Program v.0.1.2");
    JMenuBar menubar = new JMenuBar();
    JMenu menu = new JMenu("Menü");
    menubar.add(menu);
    frame.setJMenuBar(menubar);
 
 
    GridBagConstraints c = new GridBagConstraints();
    frame.getContentPane().setLayout(new GridBagLayout());
 
    //Größe des Frames berechnen und festlegen
    Toolkit t = Toolkit.getDefaultToolkit();
    Dimension d = t.getScreenSize();
    int height = (int) d.getHeight()-30;
    int width = (int) d.getWidth();
 
    frame.setSize(width, height);
    //Init Container und panel für Adjazenzmatrix erstellen
    Container inhalt = frame.getContentPane();
    inhalt.setBackground(Color.DARK_GRAY);
 
 
 
 
    // Panel, adjazenzmatrix dem Container hinzufügen und positionieren
    JPanel p = new JPanel();
    p = createGridPanelAdjazenzmatrice(dimension, array);
    c.gridx = 0;
    c.gridy = 0;
    c.weightx = 0.3;
    c.weighty = 0.3;
    inhalt.add(p, c);
 
    //Panel, wegmatrix dem Container hinzufuegen und positionieren
 
    JPanel p2 = new JPanel();
    p2 = createGridPanelWaymatrice(dimension, array);
    c.gridx = 1;
    c.gridy = 0;
    c.weightx = 0.3;
    c.weighty = 0.3;
    inhalt.add(p2, c);
 
    JPanel p3 = new JPanel();
    p3 = createGridPanelDistancematrix(dimension, array);
    c.gridx = 2;
    c.gridy = 0;
    c.weightx = 0.3;
    c.weighty = 0.3;
    inhalt.add(p3, c);
 
    //TextFenster erstellen und einbinden
    JPanel p4 = new JPanel();
    p4.setLayout(new BorderLayout());
    c.gridwidth = 3;
    c.fill = GridBagConstraints.BOTH;
    c.gridx = 0;
    c.gridy = 1;
    c.weightx = 1;
    c.weighty = 0.7;
 
 
    JTextArea textWindow = new JTextArea();
    textWindow.setBorder(new LineBorder(Color.GREEN));
    JScrollPane scrollpane = new JScrollPane(textWindow);
    scrollpane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    p4.add(scrollpane,BorderLayout.CENTER);
    inhalt.add(p4,c);
 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
 

ConzT

Mitglied
@X5-599 Super danke dir, genau so hab ich es mir vorgestellt! :) Hab mich gestern abend dann auch noch damit gespielt und es auch so hinbekommen, das einzige problem war, dass ich die TextArea nicht auf gridwith 3 hatte und somit war sie horizontal gestreckt, das Problem hat ich nun auch erledigt :)


Weißt du zufällig auch wie ich die Farbe der Schrift der mittleren und rechten Matrix ändern kann?

Bei der ganz linken Matrix habe ich das mit setForground() geschafft. Bei den anderen beiden funktioniert dies aber nicht. Vermute das liegt daran, dass es JToggleButtons sind die nicht aktiv sind(setEnabled(false)) ?
 

X5-599

Top Contributor
Kann ich dir leider nicht sagen. Ist aber gut möglich, daß das daran liegt (setEnabled(false)). Vielleich ließe sich sowas über das jeweilige LookAndFeel ändern... Kenne mich da aber auch nicht mehr wirklich gut aus.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M ImageIcon Bild wird beim verkleinern des Fensters nicht verkleinert AWT, Swing, JavaFX & SWT 3
ZH1896ZH JavaFX Wie kann ich die Fenstergrösse entsprechend dem Inhalt vergrössern/verkleinern AWT, Swing, JavaFX & SWT 2
S Kreis vergrößern/verkleinern mit Buttons AWT, Swing, JavaFX & SWT 1
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
M JavaFX Bildgröße verkleinern AWT, Swing, JavaFX & SWT 5
D Gui auslagern/verkleinern AWT, Swing, JavaFX & SWT 5
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
P Bilder verkleinern AWT, Swing, JavaFX & SWT 2
E Swing Den Button Vergrössern/Verkleinern entfernen AWT, Swing, JavaFX & SWT 4
E Swing JPanels durch ziehen am Rand vergrößern/verkleinern?! AWT, Swing, JavaFX & SWT 2
A AWT Buttons verkleinern AWT, Swing, JavaFX & SWT 7
P ScrollPane klappt zusammen beim verkleinern des Frames AWT, Swing, JavaFX & SWT 2
E Bild effektiv vergrössern / verkleinern (zoom) AWT, Swing, JavaFX & SWT 23
G JComboBox verkleinern AWT, Swing, JavaFX & SWT 6
G Icons verkleinern AWT, Swing, JavaFX & SWT 4
M ImageIcon in JLabel verkleinern AWT, Swing, JavaFX & SWT 8
F Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern) AWT, Swing, JavaFX & SWT 5
A Icon verkleinern AWT, Swing, JavaFX & SWT 3
T BufferedImage verkleinern Resultat ist zu pixelig. AWT, Swing, JavaFX & SWT 6
P Inhalt eines Canvas verkleinern AWT, Swing, JavaFX & SWT 3
D Bilder verkleinern AWT, Swing, JavaFX & SWT 3
D bilder verkleinern AWT, Swing, JavaFX & SWT 3
C Componente verkleinern lasse wenn die Frame verkleinert wird AWT, Swing, JavaFX & SWT 2
G Fenster ohne "verkleinern","Schliessen", AWT, Swing, JavaFX & SWT 4
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
Lukas2904 LookAndFeel Wie ändere ich das allgemeine Disigne des Fensters? AWT, Swing, JavaFX & SWT 4
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
N Aktualisierung des Fensters AWT Java ohne Ruckeln AWT, Swing, JavaFX & SWT 3
emma_louisa JavaFX Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
W Farbe des Fensters AWT, Swing, JavaFX & SWT 2
J JTable bounds ändern durch resizing des Fensters AWT, Swing, JavaFX & SWT 9
Krappe87 JavaFX minWidth/minHeigth der Stage (des Fensters) festlegen AWT, Swing, JavaFX & SWT 4
A LayoutManager Statusleiste auch nach Verkleinerung des Fensters anzeigen AWT, Swing, JavaFX & SWT 1
X Swing Größe eines Fensters JFrame / Frame AWT, Swing, JavaFX & SWT 5
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
S Swing Aktualisierung Fensters AWT, Swing, JavaFX & SWT 7
D Aufruf neuer Klasse ohne Erzeugung eines neuen Fensters AWT, Swing, JavaFX & SWT 3
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
S SWT Unterbindung der Minimierung/Maximierung eines Fensters AWT, Swing, JavaFX & SWT 10
W Swing Event bei Schließen des Fensters AWT, Swing, JavaFX & SWT 6
B aktuelle Position des Fensters ermitteln AWT, Swing, JavaFX & SWT 3
H GridBagLayout spinnt beim vergrößern des Fensters als auch beim Maximieren AWT, Swing, JavaFX & SWT 4
Z JPanel wird erst durch aufziehen des Fensters sichtbar AWT, Swing, JavaFX & SWT 3
C Auf Größenänderung eines Fensters (JFrame) reagieren AWT, Swing, JavaFX & SWT 2
R AWT [Anfänger] Darstellungsfehler bei Größenändereung einese Fensters AWT, Swing, JavaFX & SWT 2
A Swing Bei größe verändern des Fensters Grafik weg AWT, Swing, JavaFX & SWT 3
D Grundfarbe eines Gui-Fensters setzen AWT, Swing, JavaFX & SWT 10
W Problem bei awt und Swing mit Schließen des Fensters AWT, Swing, JavaFX & SWT 2
C Event nach Größenänderung des Fensters AWT, Swing, JavaFX & SWT 3
J WindowEvents beim Schliessen eines Fensters AWT, Swing, JavaFX & SWT 5
C Beim Schließen eines fensters, schließen sich alle AWT, Swing, JavaFX & SWT 5
S Update des fensters beim Ersetzen von JPanels AWT, Swing, JavaFX & SWT 9
& Position eines Fensters nicht verändern AWT, Swing, JavaFX & SWT 8
A Position des Fensters verändern AWT, Swing, JavaFX & SWT 21
S Methode zum vergrößern des Fensters gesucht AWT, Swing, JavaFX & SWT 3
G Uhrzeit in der Titelleiste eines Fensters anzeigen? AWT, Swing, JavaFX & SWT 9
S Position eines Fensters festlegen AWT, Swing, JavaFX & SWT 2
A Screenshot eines best. Fensters AWT, Swing, JavaFX & SWT 5
J Öffnen und Schließen eines Fensters (mit Synchronisierung) AWT, Swing, JavaFX & SWT 3
E Beim Schließen des Fensters eigene Funktion aufrufen AWT, Swing, JavaFX & SWT 8
S Schließen eines Fensters bei Klick auf Button? AWT, Swing, JavaFX & SWT 2
C Probleme beim 2. öffnen eines Fensters AWT, Swing, JavaFX & SWT 5
H Größe eines Fensters ermitteln AWT, Swing, JavaFX & SWT 13
H Code nach dem schließen eines Fensters ausführen? AWT, Swing, JavaFX & SWT 3
G Schließen eines Fensters über [X] und Methode ausführen AWT, Swing, JavaFX & SWT 2
D Schließen eines Fensters verhindern AWT, Swing, JavaFX & SWT 3
B Minimierung eines Fensters AWT, Swing, JavaFX & SWT 4
M Panels werden erst beim max. oder min. des Fensters sichtbar AWT, Swing, JavaFX & SWT 2
Redeason Objekte in meiner GUI verschieben AWT, Swing, JavaFX & SWT 1
H JavaFX Timeline II: Verschieben einer ImageView AWT, Swing, JavaFX & SWT 16
frager2345 JTextLabel im Flowlayout verschieben AWT, Swing, JavaFX & SWT 4
U JavaFX CheckBoxen in GUI verschieben AWT, Swing, JavaFX & SWT 20
M Polygon per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 26
F Popup Menu etwas verschieben AWT, Swing, JavaFX & SWT 2
K JavaFX Element in HBOX nach rechts verschieben AWT, Swing, JavaFX & SWT 2
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
M Swing JPanel flüssig verschieben AWT, Swing, JavaFX & SWT 5
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
B JavaFX Viewport verschieben AWT, Swing, JavaFX & SWT 3
C Swing Geschachteltes GUI mit BorderLayout - Vertikal & horizontal Verschieben AWT, Swing, JavaFX & SWT 1
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
Y Titel Verschieben AWT, Swing, JavaFX & SWT 11
Z Bildervorschau, MouseDragged das Bild verschieben AWT, Swing, JavaFX & SWT 1
M label mit icon verschieben. AWT, Swing, JavaFX & SWT 1
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
W Buttons verschieben AWT, Swing, JavaFX & SWT 3
Z Plot nach links verschieben!! AWT, Swing, JavaFX & SWT 1
M 3D-Grafik Denkfehler bei Verschieben von Shapes AWT, Swing, JavaFX & SWT 0
T JLabel Nullpunkt verschieben AWT, Swing, JavaFX & SWT 6
K JavaFX Spalten der Tabellen verschieben AWT, Swing, JavaFX & SWT 2
P JList/JScroolPane Text verschieben und text wrappen AWT, Swing, JavaFX & SWT 3
L JFrame von der Taskleiste zu den ausgeblendeten Symbolen verschieben AWT, Swing, JavaFX & SWT 2
O Swing Spalten-Position nach verschieben AWT, Swing, JavaFX & SWT 6
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
L Componenten im JFrame an genaue stelle verschieben. AWT, Swing, JavaFX & SWT 2
D JSplitPane lässt sich nicht verschieben AWT, Swing, JavaFX & SWT 3
A JLabel verschieben AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben