Hallo,
ich baue zum ersten Mal eine Struktur mit GridBagLayout zusammen. Das Ergebnis soll eine Tastatur darstellen, die dieser hier in etwa ähnelt:
(Schattierungen, Zahlen und die grauen Linien bitte ignorieren, die sind nur zu Dokuzwecken da)
Ich habe mich zunächst einmal an den Buchstabenblock begeben und dort ein bißchen rumgebastelt (so Sachen wie die Abstände etc interessieren mich gerade weniger, wichtig ist erstmal nur die korrekte Ausrichtung). Da ich (wie oben zu sehen) einige Buttons habe, die eine halbe Buttonbreite in die nächste Spalte hineinragen, habe ich mir ein Raster hinter den Buttons vorgestllt, dessen Spaltenbreite halb so groß ist wie die Breite eines Buttons und dessen Zeilenhöhe der Höhe eines normalen Buttons entspricht.
So bin ich bis hierher gekommen:
(die roten Rechtecke habe ich später zur Verdeutlichung der Probleme eingezeichnet, die weißen Quadrate mit rotem Kreuz sind Standardicons, die gewählt werden, wenn eine Grafik fehlt - einfach ignorieren)
Wie an den roten Rechtecken zu erkennen ist, gibt es ein paar Probleme. Beispielsweise wird der Versatz von einer halben Buttonbreite zwischen der zweiten und der dritten Reihe nicht umgesetzt. Verantwortlich sind die zu breiten Buttons "Q" und """. Der Enter-Button ist zu breit, dafür aber nicht hoch genug - dafür ist der "-"-Button viel zu lang, der nimmt den "freigehaltenen" Platz des Enter-Buttons ein. Der Delete-Button ist glaube ich korrekt, der scheinbare Fehler wird hier wohl durch den fehlenden Versatz links ausgelöst.
Hier noch der Code, mit dem ich das Layout zusammenbaue:
Mein komplettes Testprogramm zu posten würde wohl etwas weitgehen. Ich hoffe, ihr kommt mit obigem Code klar, das Objekt "layout" wird jeweils um den Button an der gegebenen Stelle gebeten, die Parameter bedeuten (Spalte, Zeile). Wie kann ich die oben beschriebenen Fehler beheben? Ist mein Ansatz beim Umgang mit dem GridBagLayout überhaupt vernünftig?
mpG
Tobias
ich baue zum ersten Mal eine Struktur mit GridBagLayout zusammen. Das Ergebnis soll eine Tastatur darstellen, die dieser hier in etwa ähnelt:
(Schattierungen, Zahlen und die grauen Linien bitte ignorieren, die sind nur zu Dokuzwecken da)
Ich habe mich zunächst einmal an den Buchstabenblock begeben und dort ein bißchen rumgebastelt (so Sachen wie die Abstände etc interessieren mich gerade weniger, wichtig ist erstmal nur die korrekte Ausrichtung). Da ich (wie oben zu sehen) einige Buttons habe, die eine halbe Buttonbreite in die nächste Spalte hineinragen, habe ich mir ein Raster hinter den Buttons vorgestllt, dessen Spaltenbreite halb so groß ist wie die Breite eines Buttons und dessen Zeilenhöhe der Höhe eines normalen Buttons entspricht.
So bin ich bis hierher gekommen:
(die roten Rechtecke habe ich später zur Verdeutlichung der Probleme eingezeichnet, die weißen Quadrate mit rotem Kreuz sind Standardicons, die gewählt werden, wenn eine Grafik fehlt - einfach ignorieren)
Wie an den roten Rechtecken zu erkennen ist, gibt es ein paar Probleme. Beispielsweise wird der Versatz von einer halben Buttonbreite zwischen der zweiten und der dritten Reihe nicht umgesetzt. Verantwortlich sind die zu breiten Buttons "Q" und """. Der Enter-Button ist zu breit, dafür aber nicht hoch genug - dafür ist der "-"-Button viel zu lang, der nimmt den "freigehaltenen" Platz des Enter-Buttons ein. Der Delete-Button ist glaube ich korrekt, der scheinbare Fehler wird hier wohl durch den fehlenden Versatz links ausgelöst.
Hier noch der Code, mit dem ich das Layout zusammenbaue:
Code:
private void initKeyBoard() {
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridheight = 1;
c.gridwidth = 2;
c.fill = GridBagConstraints.BOTH;
// First row
add(layout.getButton(0, 0), c); // Button links oben - layout.getButton(Spalte, Zeile)
add(layout.getButton(1, 0), c);
add(layout.getButton(2, 0), c);
add(layout.getButton(3, 0), c);
add(layout.getButton(4, 0), c);
add(layout.getButton(5, 0), c);
add(layout.getButton(6, 0), c);
add(layout.getButton(7, 0), c);
add(layout.getButton(8, 0), c);
add(layout.getButton(9, 0), c);
add(layout.getButton(10, 0), c);
add(layout.getButton(11, 0), c);
add(layout.getButton(12, 0), c);
c.gridwidth = GridBagConstraints.REMAINDER;
add(layout.getButton(13, 0), c);
// second row
c.gridwidth = 2;
add(layout.getButton(0, 1), c);
add(layout.getButton(1, 1), c);
add(layout.getButton(2, 1), c);
add(layout.getButton(3, 1), c);
add(layout.getButton(4, 1), c);
add(layout.getButton(5, 1), c);
add(layout.getButton(6, 1), c);
add(layout.getButton(7, 1), c);
add(layout.getButton(8, 1), c);
add(layout.getButton(9, 1), c);
add(layout.getButton(10, 1), c);
add(layout.getButton(11, 1), c);
c.gridwidth = GridBagConstraints.REMAINDER;
add(delete, c);
// third row
c.gridwidth = 3;
add(shiftLock, c);
c.gridwidth = 2;
add(layout.getButton(1, 2), c);
add(layout.getButton(2, 2), c);
add(layout.getButton(3, 2), c);
add(layout.getButton(4, 2), c);
add(layout.getButton(5, 2), c);
add(layout.getButton(6, 2), c);
add(layout.getButton(7, 2), c);
add(layout.getButton(8, 2), c);
add(layout.getButton(9, 2), c);
add(layout.getButton(10, 2), c);
add(layout.getButton(11, 2), c);
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridheight = 2;
add(enter, c);
// fourth row
c.gridwidth = 5;
add(shift, c);
c.gridwidth = 2;
add(layout.getButton(2, 3), c);
add(layout.getButton(3, 3), c);
add(layout.getButton(4, 3), c);
add(layout.getButton(5, 3), c);
add(layout.getButton(6, 3), c);
add(layout.getButton(7, 3), c);
add(layout.getButton(8, 3), c);
add(layout.getButton(9, 3), c);
add(layout.getButton(10, 3), c);
c.gridwidth = GridBagConstraints.REMAINDER;
add(layout.getButton(11, 3), c);
// fifth row
c.gridwidth = GridBagConstraints.REMAINDER;
add(space, c);
}
Mein komplettes Testprogramm zu posten würde wohl etwas weitgehen. Ich hoffe, ihr kommt mit obigem Code klar, das Objekt "layout" wird jeweils um den Button an der gegebenen Stelle gebeten, die Parameter bedeuten (Spalte, Zeile). Wie kann ich die oben beschriebenen Fehler beheben? Ist mein Ansatz beim Umgang mit dem GridBagLayout überhaupt vernünftig?
mpG
Tobias