Ich habe ein kleines Problem mit dem GridBag Layout Manager. Ich versuche 9 Panels wie folgt anzuzeigen:
Um dies zu tun, habe ich das Gitter wie folgt getrennt:
Für die Panels 1 bis 7 gibt es kein Problem, sie erscheinen so, wie ich will. Aber das Problem beginnt mit den Panels S8
und S9
. Wie Sie sehen können, nehmen die S8
und S9
die Hälfte des Frames ein, aber ich kann es nicht so anzeigen lassen. Der S8
endet am Anfang von S4
, und der S9
beginnt am Ende von S4
, ich kann nicht mit dem halben Leerzeichen umgehen.
Nur so habe ich herausgefunden, dass das S8
und S9
Panel in ein anderes Panel mit der ganzen Frame-Breite eingefügt wird - aber es muss eine korrekte Möglichkeit geben, diese beiden Panels anzuzeigen, ohne sie in ein anderes Panel zu setzen!
Hier ist der Code:
%Vor%Irgendwelche Ideen und Vorschläge sind willkommen!
Gute Frage. Es hat mich wenig gebraucht, um es zu knacken, aber ich habe es verstanden. Normalerweise hätte ich die Sektionen 1-7 in einem oberen Panel und die Sektionen 8-9 in einem unteren Panel platziert, aber ich mochte die Herausforderung von 1 Panel mit GBL. [gelangweilt]
Das Problem ist, dass Abschnitt 4 (Spaltenindizes 4 und 5) für GBL nicht gut definiert ist, daher weiß Abschnitt 8 nicht, wie weit es hinausgehen soll, um seine fünfte Spalte (Index 4) zu überdecken nach Spaltenindex 3.
Also habe ich zwei nullhöhige Abstandhalter in die Spalten eingefügt, die Abschnitt 4 ausmachen, und es hat funktioniert. Kommentieren Sie die beiden mit SPACERS markierten Zeilen, um zu sehen, was ich meine:
BEARBEITEN : Fix hinzugefügt von @SheridanVespo
vorgeschlagen %Vor% Die akzeptierte Antwort ist ansprechend, verursacht jedoch bei der Größenänderung des Rahmens eine Verbreiterung von Abschnitt 4 schneller als die flankierenden Bereiche . Diese Variation platziert die Platten 8 & amp; 9 in einem separaten Unterfenster von BoxLayout
.
%Vor%
Ich war nie ein großer Fan von GridBagLayout. Also würde ich Ihre GUI in mehrere Panels zerlegen und würde wahrscheinlich mehrere GridLayout verwenden, um zu erreichen, was Sie wollen. Etwas wie:
%Vor%Ich habe ein kleines Problem mit dem GridBag Layout Manager. Ich versuche 9 Panels wie folgt anzuzeigen:
Um dies zu tun, habe ich das Gitter wie folgt getrennt:
Für die Panels 1 bis 7 gibt es kein Problem, sie erscheinen so, wie ich will. Aber das Problem beginnt mit den Panels %code% und %code% . Wie Sie sehen können, nehmen die %code% und %code% die Hälfte des Frames ein, aber ich kann es nicht so anzeigen lassen. Der %code% endet am Anfang von %code% , und der %code% beginnt am Ende von %code% , ich kann nicht mit dem halben Leerzeichen umgehen.
Nur so habe ich herausgefunden, dass das %code% und %code% Panel in ein anderes Panel mit der ganzen Frame-Breite eingefügt wird - aber es muss eine korrekte Möglichkeit geben, diese beiden Panels anzuzeigen, ohne sie in ein anderes Panel zu setzen!
Hier ist der Code:
%Vor%Irgendwelche Ideen und Vorschläge sind willkommen!
Gute Frage. Es hat mich wenig gebraucht, um es zu knacken, aber ich habe es verstanden. Normalerweise hätte ich die Sektionen 1-7 in einem oberen Panel und die Sektionen 8-9 in einem unteren Panel platziert, aber ich mochte die Herausforderung von 1 Panel mit GBL. [gelangweilt]
Das Problem ist, dass Abschnitt 4 (Spaltenindizes 4 und 5) für GBL nicht gut definiert ist, daher weiß Abschnitt 8 nicht, wie weit es hinausgehen soll, um seine fünfte Spalte (Index 4) zu überdecken nach Spaltenindex 3.
Also habe ich zwei nullhöhige Abstandhalter in die Spalten eingefügt, die Abschnitt 4 ausmachen, und es hat funktioniert. Kommentieren Sie die beiden mit SPACERS markierten Zeilen, um zu sehen, was ich meine:
BEARBEITEN : Fix hinzugefügt von @SheridanVespo
vorgeschlagen %Vor%Für die S9-Komponente lautet Ihr Code
%Vor%Da das Koordinatensystem bei 0 und nicht bei 1 beginnt, schlage ich vor, dass der Code
ist %Vor%Die akzeptierte Antwort ist ansprechend, verursacht jedoch bei der Größenänderung des Rahmens eine Verbreiterung von Abschnitt 4 schneller als die flankierenden Bereiche . Diese Variation platziert die Platten 8 & amp; 9 in einem separaten Unterfenster von %code% .
%Vor%
Im Allgemeinen erstelle und füge ich die Komponenten eines GridBagLayouts in Y-, X-Positionsreihenfolge hinzu. Ich weiß nicht, ob das nötig ist, aber es erleichtert mir die Diagnose von Problemen.
Hier ist, was ich für Ihr Raster gefunden habe.
%Vor%Ich habe versucht, mit %code% zu überprüfen, wie es funktioniert. Aber hier nur posten .. :) Dieser Prozess verwendet mehrere Panels ineinander. Sie können diesen Ansatz versuchen, wenn dieses Beispiel bequem ist.
%Vor%
Für die letzten zwei %code% würde ich vorschlagen, dass Sie sie einfach zu einer neuen %code% mit %code% hinzufügen und diese %code% mit der %code% auf die %code% mit der% co_de setzen %. Sehen Sie sich das Codebeispiel an, das tatsächlich zu der Ausgabe geführt hat, die Sie erwartet haben:
%Vor%Hier ist die Ausgabe des obigen Codes:
Für die letzten zwei JPanel
würde ich vorschlagen, dass Sie sie einfach zu einer neuen JPanel
mit GridLayout
hinzufügen und diese JPanel
mit der GridLayout
auf die JPanel
mit der% co_de setzen %. Sehen Sie sich das Codebeispiel an, das tatsächlich zu der Ausgabe geführt hat, die Sie erwartet haben:
Hier ist die Ausgabe des obigen Codes:
Ich war nie ein großer Fan von GridBagLayout. Also würde ich Ihre GUI in mehrere Panels zerlegen und würde wahrscheinlich mehrere GridLayout verwenden, um zu erreichen, was Sie wollen. Etwas wie:
%Vor%Ich habe ein kleines Problem mit dem GridBag Layout Manager. Ich versuche 9 Panels wie folgt anzuzeigen:
Um dies zu tun, habe ich das Gitter wie folgt getrennt:
Für die Panels 1 bis 7 gibt es kein Problem, sie erscheinen so, wie ich will. Aber das Problem beginnt mit den Panels %code% und %code% . Wie Sie sehen können, nehmen die %code% und %code% die Hälfte des Frames ein, aber ich kann es nicht so anzeigen lassen. Der %code% endet am Anfang von %code% , und der %code% beginnt am Ende von %code% , ich kann nicht mit dem halben Leerzeichen umgehen.
Nur so habe ich herausgefunden, dass das %code% und %code% Panel in ein anderes Panel mit der ganzen Frame-Breite eingefügt wird - aber es muss eine korrekte Möglichkeit geben, diese beiden Panels anzuzeigen, ohne sie in ein anderes Panel zu setzen!
Hier ist der Code:
%Vor%Irgendwelche Ideen und Vorschläge sind willkommen!
Gute Frage. Es hat mich wenig gebraucht, um es zu knacken, aber ich habe es verstanden. Normalerweise hätte ich die Sektionen 1-7 in einem oberen Panel und die Sektionen 8-9 in einem unteren Panel platziert, aber ich mochte die Herausforderung von 1 Panel mit GBL. [gelangweilt]
Das Problem ist, dass Abschnitt 4 (Spaltenindizes 4 und 5) für GBL nicht gut definiert ist, daher weiß Abschnitt 8 nicht, wie weit es hinausgehen soll, um seine fünfte Spalte (Index 4) zu überdecken nach Spaltenindex 3.
Also habe ich zwei nullhöhige Abstandhalter in die Spalten eingefügt, die Abschnitt 4 ausmachen, und es hat funktioniert. Kommentieren Sie die beiden mit SPACERS markierten Zeilen, um zu sehen, was ich meine:
BEARBEITEN : Fix hinzugefügt von @SheridanVespo
vorgeschlagen %Vor%Für die S9-Komponente lautet Ihr Code
%Vor%Da das Koordinatensystem bei 0 und nicht bei 1 beginnt, schlage ich vor, dass der Code
ist %Vor%Die akzeptierte Antwort ist ansprechend, verursacht jedoch bei der Größenänderung des Rahmens eine Verbreiterung von Abschnitt 4 schneller als die flankierenden Bereiche . Diese Variation platziert die Platten 8 & amp; 9 in einem separaten Unterfenster von %code% .
%Vor%
Im Allgemeinen erstelle und füge ich die Komponenten eines GridBagLayouts in Y-, X-Positionsreihenfolge hinzu. Ich weiß nicht, ob das nötig ist, aber es erleichtert mir die Diagnose von Problemen.
Hier ist, was ich für Ihr Raster gefunden habe.
%Vor%Ich habe versucht, mit %code% zu überprüfen, wie es funktioniert. Aber hier nur posten .. :) Dieser Prozess verwendet mehrere Panels ineinander. Sie können diesen Ansatz versuchen, wenn dieses Beispiel bequem ist.
%Vor%
Für die letzten zwei %code% würde ich vorschlagen, dass Sie sie einfach zu einer neuen %code% mit %code% hinzufügen und diese %code% mit der %code% auf die %code% mit der% co_de setzen %. Sehen Sie sich das Codebeispiel an, das tatsächlich zu der Ausgabe geführt hat, die Sie erwartet haben:
%Vor%Hier ist die Ausgabe des obigen Codes:
Für die S9-Komponente lautet Ihr Code
%Vor%Da das Koordinatensystem bei 0 und nicht bei 1 beginnt, schlage ich vor, dass der Code
ist %Vor%Tags und Links java swing jpanel gridbaglayout