große mengen an jbuttons dynamisch erzeugen?

Status
Nicht offen für weitere Antworten.
H

hans

Gast
Hi,

ich will ein kleines Spiel programmieren, bei dem ich eine Fläche von Buttons habe, ähnlich wie z.B. in Minesweeper.
Wenn ich jetzt eine Spielfläche von 10x10 Feldern nehme, muss ich schon 100 Buttons initialisieren, mit ActionListener versehen, Größe festlegen usw.... für ein recht einfaches Layout brauche ich ca 600 Zeile Quellcode.

Ich habe mal versucht, die JButtons über eine Schleife zu intialisieren, für ein 10X10 Feld so in der Art:
Code:
for (int i=0; i<10; i++)
{
       for (int j=0; j<10; j++)
        {
              JButton button = new JButton("");
              button.addActionListener(this);
              buttonPane.add(button);
        }
}

Das klappt soweit, das er mir ein Layout mit 100 Buttons erstellt.
Jetzt kann ich allerdings die Buttons nicht per ActionListener abfrage, da nur noch der letzte erzeugte JButton "button" heisst.
Gibt es eine Möglichkeit dem ActionListener klar zu machen, er soll eine bestimmte Aktion ausführen, wenn irgendein Button aus dem JPanel buttonPane gedrückt wurde? Oder kann man das ganze irgendwie anders lösen?

Wenn das möglich wäre, würde ich mir eine Ableitung von JButton schreiben, die noch eine x- und eine y-Koordinate hat, und dann fragt der ActionListener nur noch die Koordinaten ab, und führt dann dementsprechend seine Aktionen aus.

gruss,
hans
 
B

bygones

Gast
hans hat gesagt.:
Wenn das möglich wäre, würde ich mir eine Ableitung von JButton schreiben, die noch eine x- und eine y-Koordinate hat, und dann fragt der ActionListener nur noch die Koordinaten ab, und führt dann dementsprechend seine Aktionen aus
Das würde ich z.B. empfehlen. Schreib dir ne klasse (sagen wir PlayButton) die von JButton abgeleitet ist und die noch die Koordinaten hat (wenn du beide brauchst oder wenn du nur den index brauchst wenn du die in einem array speicherst). In der actionPerformed holst du dir über getSource() den entsprechenden PlayButton......
 
H

hans

Gast
deathbyaclown hat gesagt.:
In der actionPerformed holst du dir über getSource() den entsprechenden PlayButton......

Wenn ich Dich richtig verstehe meinst Du ich kann die Abfrage einfach weglassen? Also das "if(eventQuelle == button)"?
Also müßte ich erst die anderen Buttons wie "exit" und ähnliches abfragen, und dann einen else Block, in dem ich davon ausgehe, dass die Ursache einer der PlayButtons war.

Werde das mal ausprobieren,
danke


gruss
hans
 
C

cello

Gast
hallo,

das könnte vielleicht helfen:

Code:
if (event.getSource() instanceof PlayButton){
    PlayButton button = event.getSource();
    System.out.println(button.getX());
    System.out.println(button.getY());
//    ...
}
 
B

Beni

Gast
*Gniii*

Vielleicht nicht unbedingt "getX" und "getY" überschreiben, da diese beiden Methoden benötigt werden, um die Position des Buttons auf dem Panel festzulegen... (ich kann sonst jetzt schon ein sehr komisches Verhalten voraussagen :wink: )

Wie wäre es mit z.B.: "getPlayX()" ?

mfg Beni
 
H

hans

Gast
hehe, danke für die Warnung Beni, aber ich habs eh schon getXPos() und getYPos() genannt :)
Gabs glaub ich vor paar tagen hier ein Topic dazu.

gruss
hans
 
H

hans

Gast
hm es klappt leider nicht:

Code:
public void actionPerformed(ActionEvent ae)
{
	Object eventQuelle = ae.getSource();
		
	if (eventQuelle instanceof PlayButton)
	{
		PlayButton butt = ae.getSource();
                butt.buttonPressed();
	}
};

Der Compiler bringt die Fehlermeldung

incompatible types
found : java.lang.Object
required: PlayButton
PlayButton butt = ae.getSource();
^
1 error


"PlayButton butt = eventQuelle" geht auch nicht, und ich kann auch nicht auf das Objekt eventQuelle die PlayButton Methoden benutzen.

Hat wer eine Idee wo der Fehler liegt?

gruss
hans
 

Vatar

Bekanntes Mitglied
Sers.
Also ich will demnächst auch ein Schiffe Versenken :D für mein/e Cousin/e (*ist das so richtig geschrieben*) schreiben und hatte auch daran gedacht das Feld aus lauter Button zu machen.

Nun zur Frage:
Ist das nicht ein ziemlich böser Resourcesfresser?
Swing Komponenten sind ja eh dafür bekannt und wenn ich jetzt 300-400 so Buttons mache, wird mir etwas unwohl.
Gibt es keine elegantere Lösung?

Thx Vatar
 
B

Beni

Gast
@Hans
Code:
PlayButton but = (PlayButton)ae.getSource();

@Vatar
Da hast du recht.

Wenn man das Ganze gleich selber zeichnet (auf nur einem Panel), würde es weniger Ressourcen verbrauchen. Mit MouseListener, etc...kann man ein ganz ähnliches, wenn nicht identisches Verhalten zu den Buttons herstellen.

Oder man kann das JTable benützen, da gibt es ja CellRenderer, CellEditor, ... Aber das ist wahrscheinlich so ziemlich die umständlichste Methode :wink:

mfg Beni
 
C

cello

Gast
Man muss wohl noch nach PlayButton casten. Sorry :/

Code:
public void actionPerformed(ActionEvent ae) 
{ 
   Object eventQuelle = ae.getSource(); 
       
   if (eventQuelle instanceof PlayButton) 
   { 
      PlayButton butt = (PlayButton)eventQuelle;
   } 
}
 
H

hans

Gast
Ok, jetzt funktioniert es, hätte ich auch selber draufkommen können :?
Danke

gruss
hans
 
B

bygones

Gast
Benis Vorschlag finde ich am Besten:

Zeichne einfach ein paar Linien auf deinem Panel (simulieren somit die Buttons). Somit weißt du ja, wieviele "Buttons" es in einer Reihe gibt bzw. wieviele Reihen es gibt.
Füge dem Panel ein MouseListener hinzu. Über getX() bzw. getY() erhältst du ja die Koordinaten wo der user die klickte. Da du ja nun weißt, wieviele Reihen es gibt und wieviele "buttons" in einer Reihe erhältst du über ein paar Berechnungen die x bzw. y Koordinate.....

Wäre ne gut Lösung :roll:
 

Vatar

Bekanntes Mitglied
Aber wie willst du es machen wenn die Fenstergröße variabel ist. Dann ändert sich ja Breite und Höhe in pixel
 
B

Beni

Gast
Möglichkeit 1:
JScrollPane

Möglichkeit 2:
Ein bisschen rechnen. Man ist in der Lage die Höhe in Pixel durch die Anzahl Rechtecke übereinander zu teilen...

:wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P TreeView automatisch an große von Inhalt anpassen AWT, Swing, JavaFX & SWT 3
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
J Swing Große Gui designen/gestalten AWT, Swing, JavaFX & SWT 13
E 2D-Grafik Speicherprobleme große Tiff-Dateien AWT, Swing, JavaFX & SWT 50
J Welche(n) LayoutManager für große Gui? AWT, Swing, JavaFX & SWT 6
M Swing Große GUI - Konzept, Ideen, Vorschläge AWT, Swing, JavaFX & SWT 20
G Große dynamische ContextMenus erzeugen (Eclipse RCP) AWT, Swing, JavaFX & SWT 4
R JPanel sehr große JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
T JTable / RowSorter macht große Probleme AWT, Swing, JavaFX & SWT 2
P SWT Button --> große Probleme!! AWT, Swing, JavaFX & SWT 7
D verschieden große Componenten in einem JPanel? AWT, Swing, JavaFX & SWT 2
G zu viele/große BufferedImage führt zu Java heap space AWT, Swing, JavaFX & SWT 5
C JTree bereitet große Probleme, kann uns bitte jemand helfen! AWT, Swing, JavaFX & SWT 6
J Große Anzahl von Comboboxen in Tabelle darstellen AWT, Swing, JavaFX & SWT 2
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
H Auswahlmenü mit JButtons AWT, Swing, JavaFX & SWT 4
H JButtons werden nicht angezeigt AWT, Swing, JavaFX & SWT 5
A Swing Meine JButtons werden nicht angezeigt bitte helft mir AWT, Swing, JavaFX & SWT 2
N "Automatisches" erstellen von jButtons AWT, Swing, JavaFX & SWT 1
F JButtons neu laden AWT, Swing, JavaFX & SWT 4
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
S JButtons an Koordinaten setzen AWT, Swing, JavaFX & SWT 3
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
M Swing Selbstanordnende JButtons AWT, Swing, JavaFX & SWT 4
J EventHandler Bei JButtons AWT, Swing, JavaFX & SWT 2
L Swing Variable Anzahl an JButtons AWT, Swing, JavaFX & SWT 7
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
A JTextField und JButtons AWT, Swing, JavaFX & SWT 2
F JButtons erstellen lassen mit unterschiedlichen Funktionen AWT, Swing, JavaFX & SWT 3
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
Kenan89 LayoutManager JPanel wächst beim adden neuer JButtons nicht mit AWT, Swing, JavaFX & SWT 4
A JButtons - es wird beim falschen Button die Hintergrundfarbe angepasst AWT, Swing, JavaFX & SWT 2
Z kleine JButtons und ihre Beschriftung AWT, Swing, JavaFX & SWT 5
K Swing Abgerundete JButtons AWT, Swing, JavaFX & SWT 8
Tsuna JButtons in Apple-Design AWT, Swing, JavaFX & SWT 4
J JButtons in aktivieren und deaktivieren AWT, Swing, JavaFX & SWT 3
T JButtons indexiert unter NetBeans anlegen AWT, Swing, JavaFX & SWT 7
H JButtons in JTable anzeigen AWT, Swing, JavaFX & SWT 5
T Maximale Länge eines JButtons AWT, Swing, JavaFX & SWT 5
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
R Swing Verschieben eines jButtons mittels MouseDragged AWT, Swing, JavaFX & SWT 4
K Runde JButtons ? AWT, Swing, JavaFX & SWT 7
B Swing JButtons in eine Arraylist<JButton> einfügen AWT, Swing, JavaFX & SWT 2
G Swing JButtons + ActionListener + final AWT, Swing, JavaFX & SWT 3
U Problem mit JButtons AWT, Swing, JavaFX & SWT 6
C Interface für JButtons,... AWT, Swing, JavaFX & SWT 7
J Swing JButtons und die ActionEvents AWT, Swing, JavaFX & SWT 2
P JButtons haben nicht immer lust zu erscheinen AWT, Swing, JavaFX & SWT 9
U Grafikkontext unter JButtons? AWT, Swing, JavaFX & SWT 5
Strahlungsleck Funktionalität von JButtons (Actionlistener etc.) AWT, Swing, JavaFX & SWT 17
G Sehr kleine JButtons mit Icon oder Beschriftung AWT, Swing, JavaFX & SWT 2
F Sender für jButtons? AWT, Swing, JavaFX & SWT 2
M ich will die alten "alte JButtons"wieder haben AWT, Swing, JavaFX & SWT 6
J JButtons in Tabellenspalten anzeigen AWT, Swing, JavaFX & SWT 2
J JScrollBar scroll-Verhalten auf 2 JButtons umleiten? AWT, Swing, JavaFX & SWT 2
N Minesweeper: 2D Feld von JButtons anlegen AWT, Swing, JavaFX & SWT 19
F Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern) AWT, Swing, JavaFX & SWT 5
U Bilder, JLabels, JButtons voreinander AWT, Swing, JavaFX & SWT 7
D Darstellungsprobleme bei JButtons auf JInternalFrames AWT, Swing, JavaFX & SWT 4
A Hintergrundfrabe eines JButtons innerhalb eines JToolBar AWT, Swing, JavaFX & SWT 4
T Ausrichtung eines Jbuttons AWT, Swing, JavaFX & SWT 6
S JButtons Größe AWT, Swing, JavaFX & SWT 15
M JButtons immer gleiche Größe? AWT, Swing, JavaFX & SWT 8
H Unsichtbare JButtons? AWT, Swing, JavaFX & SWT 5
C JComboBox mit JButtons befüllen AWT, Swing, JavaFX & SWT 8
1 Warum sind JButtons viel breiter als der enthaltene Text ? AWT, Swing, JavaFX & SWT 4
S Text eines JButtons vertikal schreiben AWT, Swing, JavaFX & SWT 5
L-ectron-X Den Text eines JButtons unter das Icon setzen? AWT, Swing, JavaFX & SWT 2
M JButtons in JScrollPanel darstellen AWT, Swing, JavaFX & SWT 6
S JButtons in einem JPanel erscheinen nicht direkt AWT, Swing, JavaFX & SWT 7
G von JButtons erben, aber richtig! AWT, Swing, JavaFX & SWT 4
R JButtons werden nicht dargestellt AWT, Swing, JavaFX & SWT 7
G JButtons AWT, Swing, JavaFX & SWT 7
Z Problem mit Spielfläche aus JButtons AWT, Swing, JavaFX & SWT 2
G Icon eines JButtons ändern? AWT, Swing, JavaFX & SWT 7
M JButtons mit Linie verbinden AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben