ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
549
549
EMPFEHLEN
-
Hallo allerseits,
ich habe eine Aufgabe bekommen bei der ich ein Tic Tac Toe Spielfeld erstellen soll. Als erstes soll das Spielfeld aus neun Buttons bestehen welche alle die gleiche Grösse haben sollen. Dies soll mithilfe eines GridBagLayouts geschehen. Ich habe hier mal einen Code für einen Button geschrieben aber leider steht der Button nicht oben links wie es sein soll, sondern zentriert und relativ klein. Kann mir jemand sagen was ich falsch mache?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
import java.awt.*; public class Buttons { public void buttonFenster() { // Fenster erstellen Frame bf = new Frame("Tic Tac Toe"); bf.setSize(500,500); // Panel erstellen Panel p = new Panel(); // Buttons erstellen Button b1 = new Button("B"); GridBagConstraints eigenschaftenB1 = new GridBagConstraints(); eigenschaftenB1.gridx = 0; eigenschaftenB1.gridy = 0; eigenschaftenB1.gridheight = 1; eigenschaftenB1.gridwidth = 1; p.add(b1,eigenschaftenB1); bf.add(p); bf.setVisible(true); } public static void main(String args[]) { Buttons b = new Buttons(); b.buttonFenster(); } }
-
Du kannst doch beim GridBagConstraints die Eigenschaften anchor und fill setzten.
-
Hi starbug,
was sollen denn die GridBagConstraints ausrichten, wenn du gar kein GridBagLayout gesetzt hast?
+ du musst schon sagen in welche Ecke der Button soll!
+ ...
der Funktionierende Code:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Button; import java.awt.Frame; public class ButtonFrame { public void buttonFenster() { // Fenster erstellen Frame bf = new Frame("Tic Tac Toe"); bf.setSize(500, 500); GridBagLayout gbl = new GridBagLayout(); bf.setLayout(gbl); // Buttons erstellen Button b1 = new Button("B"); GridBagConstraints eigenschaftenB1 = new GridBagConstraints(); eigenschaftenB1.gridx = 0; eigenschaftenB1.gridy = 0; eigenschaftenB1.gridheight = 1; eigenschaftenB1.gridwidth = 1; eigenschaftenB1.anchor = GridBagConstraints.NORTHWEST; eigenschaftenB1.weightx = 1; eigenschaftenB1.weighty = 1; gbl.setConstraints(b1, eigenschaftenB1); bf.add(b1); bf.setVisible(true); } public static void main(String args[]) { ButtonFrame b = new ButtonFrame(); b.buttonFenster(); } }
javaDeveloper2011
-
01.06.11 19:57 #4SE Tutorials.de Gastzugang
Also JD's Ansatz ist schon richtig. Du musst auch erstmal das GBL setzen um damit arbeiten zu können. Ich würde hier allerdings GBC.anchestor auf CENTER belassen. Dessweiteren würde ich nicht für jeden Button ein neues GBC erstellen sondern mit einem arbeiten und anstatt bei Container.add() das GBC zu übergeben würde ich es über GBL.setConstraints(Component, GBC) setzen. Natürlich ist nur ein Button dann zentriert. Der Effekt der richtig ausgerichteten Buttons ensteht erst wenn alle 9 Buttons hinzugefügt wurden.
Schau dir in meinem Blog *siehe Signatur* mal das Anlegen des Spielfeldes an. Dort ist genau beschrieben wie man sowas mit einem GBL machen kann.
-
Danke schon mal für die Tipps. Das bedeutet also auch das ich die Buttons direkt ins Fenster setzen kann und nicht erst noh ein Label erstellen muss, richtig?
-
So ich hab das mal getestet und mit 3 Buttons geht das auch noch ganz gut aber wenn ich den 4 einfüge hängt der schon wieder irgendwo in der Luft
. Ich muss doch eigentlich nur die gridx und gridy Werte ändern oder? Hier mal wie ich die 4 Buttons erstellt habe.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
Button b1 = new Button("1"); GridBagConstraints eigenschaftenB1 = new GridBagConstraints(); eigenschaftenB1.gridx = 0; eigenschaftenB1.gridy = 0; eigenschaftenB1.gridheight = 1; eigenschaftenB1.gridwidth = 1; eigenschaftenB1.anchor = GridBagConstraints.NORTHWEST; eigenschaftenB1.weightx = 1; eigenschaftenB1.weighty = 1; eigenschaftenB1.fill = GridBagConstraints.BOTH; Button b2 = new Button("2"); GridBagConstraints eigenschaftenB2 = new GridBagConstraints(); eigenschaftenB2.gridx = 1; eigenschaftenB2.gridy = 0; eigenschaftenB2.gridheight = 1; eigenschaftenB2.gridwidth = 1; eigenschaftenB2.anchor = GridBagConstraints.NORTH; eigenschaftenB2.weightx = 1; eigenschaftenB2.weighty = 1; eigenschaftenB2.fill = GridBagConstraints.BOTH; Button b3 = new Button("3"); GridBagConstraints eigenschaftenB3 = new GridBagConstraints(); eigenschaftenB3.gridx = 2; eigenschaftenB3.gridy = 0; eigenschaftenB3.gridheight = 1; eigenschaftenB3.gridwidth = 1; eigenschaftenB3.anchor = GridBagConstraints.NORTHEAST; eigenschaftenB3.weightx = 1; eigenschaftenB3.weighty = 1; eigenschaftenB3.fill = GridBagConstraints.BOTH; Button b4 = new Button("4"); GridBagConstraints eigenschaftenB4 = new GridBagConstraints(); eigenschaftenB3.gridx = 0; eigenschaftenB3.gridy = 1; eigenschaftenB3.gridheight = 1; eigenschaftenB3.gridwidth = 1; eigenschaftenB3.anchor = GridBagConstraints.WEST; eigenschaftenB3.weightx = 1; eigenschaftenB3.weighty = 1; eigenschaftenB3.fill = GridBagConstraints.BOTH;
-
02.06.11 00:16 #7
- Registriert seit
- Apr 2007
- Beiträge
- 6
Wie wärs mit GridLayout(0,3) oder auch GridLayout(3,3)
Damit sagst du es gibt pro Zeile 3 Elemente.
Damit brauchst du einfach nur ein bf.add(button1), etc. machen
du erhälst immer 3 Buttons pro Zeile.
http://download.oracle.com/javase/tu...yout/grid.html
-
Hi,
@thunderwave: du hast völlig recht, nur glaub ich muss das GBL verwendetwerden.
@SPiKEe: das mit dem einen GBC hab ich jetzt auch umgesetzt, aber das adden war denk ich mal eh schon richtig.Dies soll mithilfe eines GridBagLayouts geschehen.
@starbug:Code java:1 2
gbl.setConstraints(b1, eigenschaftenB1); bf.add(b1);
die unsaubere Darstellung kam wohl nur weil noch nicht alle Buttons drin waren,
hier nochmal ein Code, dessen Ausgabe auch im Anhang ist:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Button; import java.awt.Frame; public class ButtonFrame { public void buttonFenster() { // Fenster erstellen Frame bf = new Frame("Tic Tac Toe"); bf.setSize(500, 500); GridBagLayout gbl = new GridBagLayout(); bf.setLayout(gbl); GridBagConstraints eigenschaften = new GridBagConstraints(); eigenschaften.gridx = 0; eigenschaften.gridy = 0; eigenschaften.gridheight = 1; eigenschaften.gridwidth = 1; eigenschaften.anchor = GridBagConstraints.NORTHWEST; eigenschaften.weightx = 1; eigenschaften.weighty = 1; // Buttons erstellen Button b1 = new Button("B1"); gbl.setConstraints(b1, eigenschaften); bf.add(b1); Button b2 = new Button("B2"); eigenschaften.gridx = 1; eigenschaften.anchor = GridBagConstraints.NORTH; gbl.setConstraints(b2, eigenschaften); bf.add(b2); Button b3 = new Button("B3");gbl.setConstraints(b3, eigenschaften); eigenschaften.gridx = 2; eigenschaften.anchor = GridBagConstraints.NORTHEAST; gbl.setConstraints(b3, eigenschaften); bf.add(b3); Button b4 = new Button("B4"); eigenschaften.gridx = 0; eigenschaften.gridy = 1; eigenschaften.anchor = GridBagConstraints.WEST; gbl.setConstraints(b4, eigenschaften); bf.add(b4); Button b5 = new Button("B5"); eigenschaften.gridx = 1; eigenschaften.anchor = GridBagConstraints.CENTER; gbl.setConstraints(b5, eigenschaften); bf.add(b5); Button b6 = new Button("B6"); eigenschaften.gridx = 2; eigenschaften.anchor = GridBagConstraints.EAST; gbl.setConstraints(b6, eigenschaften); bf.add(b6); Button b7 = new Button("B7"); eigenschaften.gridx = 0; eigenschaften.gridy = 2; eigenschaften.anchor = GridBagConstraints.SOUTHWEST; gbl.setConstraints(b7, eigenschaften); bf.add(b7); Button b8 = new Button("B8"); eigenschaften.gridx = 1; eigenschaften.anchor = GridBagConstraints.SOUTH; gbl.setConstraints(b8, eigenschaften); bf.add(b8); Button b9 = new Button("B9"); eigenschaften.gridx = 2; eigenschaften.anchor = GridBagConstraints.SOUTHEAST; gbl.setConstraints(b9, eigenschaften); bf.add(b9); bf.setVisible(true); } public static void main(String args[]) { ButtonFrame b = new ButtonFrame(); b.buttonFenster(); } }
javaDeveloper2011
-
03.06.11 16:04 #9SE Tutorials.de Gastzugang
javaDev zeigt wie es richtig geht. *Von meinem Blog abgeschrieben oder selber gewusst ? xD*
Was ich noch zu bemängeln hätte wäre der Konstruktor und das umständliche Zuweisen der GridBagConstraints. Ich persönlich bevorzuge den langen Konstruktor und übergeben diesem meine gewünschten default-Werte. Dadurch erreiche ich das ich auch wirklich nur die Werte manipulieren muss mit denen ich auch wirklich arbeite. Aber das ist eigentlich nur eine Frage des Schreibaufwandes den man sich selbst machen will.
Dem Vorschlag von thunderwave mit dem GridLayout kann ich mich allerdings auch anschließen. Ich selber habe es noch nicht verwendet ... aber aus vielen anderen Codes habe ich gelesen das dies für genau das was du willst dann doch das einfachere ist. Erklärung dazu müsstest du dir aber von den anderen geben lassen oder aus der DOC lesen.
-
Hi,
@SPiKEe: ich hab in nen paar alten Codes von mir nachgeschaut!
wie würdest du den Konstruktor noch verkürzen
(ich setze immer nur die Wert die auch wirklich verändert werden müssen)
Hier jetzt noch ne Lösung mit GridLayout + Einsatz von globalem Array + Konstruktor + ...
(25 statt 88 Zeilen)
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
import java.awt.Button; import java.awt.Frame; import java.awt.GridLayout; public class TicTacToeShortCode extends Frame { private Button[] button; public TicTacToeShortCode() { super("Tic Tac Toe"); setLayout(new GridLayout(3, 3)); button = new Button[9]; for(int i=0; i<button.length; i++){ button[i] = new Button("B"+(i+1)); add(button[i]); } setVisible(true); setSize(500, 500); } public static void main(String args[]) { new TicTacToeShortCode(); } }
Gruß
-
04.06.11 12:50 #11SE Tutorials.de Gastzugang
@ javaDev
Na wie ich den GBC-Konstruktor verwende steht doch in meinem Blog =).
Und das einzige was ich an deinem Beispiel noch ändern würde wäre das ganze mit Swing zu machen und nich mittem AWT ... aber ansonsten *bis auf den fehlenden ActionListener* ein kurzes knappes aber vollständiges und funktionierendes Beispiel.
Ähnliche Themen
-
[C++] Snake Klon Spielfeld
Von Asix im Forum C/C++Antworten: 10Letzter Beitrag: 04.06.09, 00:06 -
GridBagLayout
Von soa im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 09.08.07, 19:30 -
Spielfeld mit JLabel Array, Null-Pointer-Exception beim Einfügen der JLabels
Von lucas66 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 13.06.07, 12:25 -
4 gewinnt - Problem mit Array für das Spielfeld
Von sacridex im Forum C/C++Antworten: 4Letzter Beitrag: 06.05.05, 20:39 -
Spielfeld Generator
Von Matthias Kannengiesser im Forum Flash PlattformAntworten: 2Letzter Beitrag: 28.01.03, 07:21





Zitieren
Login





