Mehrere MouseListener?

Status
Nicht offen für weitere Antworten.
C

conzo

Gast
Hallo,
Ich habe folgendes Problem:

Ich soll für die Uni ein Mühle Spiel programmieren, dass durch MouseKlicks gesteuert werden kann.
Also ich bin jetzt soweit, dass ich alle grundlegenden Spielabläufe fertiggestellt habe und via Tastatur spielen kann.
Über ein Frame lasse ich mir das Spielfeld darstellen. Ok soweit. Spielsteine setzen per Mouseklicks kann ich auch (also ich habe Bereiche deklariert, wenn man auf diese klickt, wird dorthin ein Spielstein gezeichnet. Ausserhalb des Bereiches passiert nichts.) Nur jetzt kommt meine Problem:
Habe ich durch setzen der Steine eine Mühle geschlossen, müsste ich eigentlich den Stein anklicken, den das Spiel entfernen soll. Nur dann hänge ich daran fest, dass der zu entfernende Stein als der nächste Stein den es zu Setzen gilt erkannt wird. D.h. ich bräuchte eigentlich dafür einen eigenen Listener, der sobald eine Mühle erkannt wird den nächsten Klick als den erkennt der einen Stein entfernen soll... ...nur wie mache ich das?
Code sieht im allgemeinen so aus:

Code:
public class Spielfeld extends JFrame {

public Spielfeld (){

initalisieren der Koordinaten auf die geklickt werden soll

windowListener()

mouseListener(){
   mouseClicked(){
      bekomme X-Y Achsen
       schauen ob in deklarierten Positionen
        wenn ja, dann setze/zeichne Spielstein
         schauen ob gezeichneter Stein eine Mühle schliesst
          wenn ja dann...
-->      und ab hier hänge ich dann
}//mouseListener 
}//Konstruktor
}//Klasse-Spielfeld
class zeichneSpielfeld{
   Thread zum neuzeichnen

 paint(){} //Zeichnen des Spielfeldes
}

Vielleicht liegt es auch daran, dass ich zum zeichnen, bzw zum neuzeichnen des Spielfeldes einen Thread benutze...
Also, wäre nett, wenn mir jemand weiterhelfen kann. Ich bedanke mich schonmal im Vorraus!!!

mfg conzo
 

L-ectron-X

Gesperrter Benutzer
Warum so kompliziert?
Du kannst doch mit Wahrheitstypen (boolean) arbeiten.
Wenn ein Stein gesetzt ist = true, wenn nicht = false. Die Variable kannst Du in der "Steinklasse" einführen und verwalten. Somit "weiß" jede Stein-Instanz, ob sie gesetzt wurde, oder nicht.
Und bei einem Mausklick kannst Du nun abfragen
Code:
if(stein.istGesetzt())
  ...
 

zd

Bekanntes Mitglied
erstens mal würd ich das anders machen:
Code:
 mouseClicked(){
      bekomme X-Y Achsen
      schauen ob in deklarierten Positionen
      wenn ja, dann setze/zeichne Spielstein
      schauen ob gezeichneter Stein eine Mühle schliesst
      wenn ja dann... 
            schauen ob gezeichneter Stein eine Mühle schliesst
            wenn ja dann...  
                [b]entferne den anderen...[/b]
}//mouseListener

wenn der stein automatisch entfernt wird, ist das für den spieler eh angenehmer.
falls du jetzt das problem hast, dass du auf den alten stein nicht zugreifen kannst, dann leg dir beim erzeugen ein array an, das dein spielfeld darstellt, und halt dir da referenzen auf die steine. (aber vermutlich wirst du das eh haben).

edit: falls du an deiner methode festhalten willst (wovon ich abraten würde):
mach dir einen boolean removingStone.
im mouselistener:
Code:
public void mouseClicked(MouseEvent e) {
   if (removingStone) {
         // jag den stein zum teufel (vorher prüfen ob es auch der stein in der mühle ist!!!!! )
         removingStone = false;
   }
    else {
         //was du vorher auch getan hast, dann:
          schauen ob gezeichneter Stein eine Mühle schliesst
            wenn ja dann...  
                removingStone = true;
   }
   
}

mehrere mouselistener kannst du zwar theoretisch setzten, macht aber keinen sinn, da nur "der oberste" ausgewertet wird.
sprich der zuerst (oder der zuletzt?!?) geaddete mouseListener fängt das event ab und verarbeitet es, bei den restlichen kommt nichts mehr an.
 
C

conzo

Gast
zd hat gesagt.:
mehrere mouselistener kannst du zwar theoretisch setzten, macht aber keinen sinn, da nur "der oberste" ausgewertet wird.
sprich der zuerst (oder der zuletzt?!?) geaddete mouseListener fängt das event ab und verarbeitet es, bei den restlichen kommt nichts mehr an.

Jap, genau das ist mein Problem. Wenn ich 2 mouseListener setze, wird immer nur der letzte, also der, der eigentlich zum entfernen von Steinen dienen soll verarbeitet. D.h. ich kann alle Spielsteine vom Feld entfernen, bis es leer ist und dann ist das Spiel "sozusagen beendet" weil keine Steine mehr da sind.
Angenommen ich setze einen Stein, klicke ich auf das Feld, rufe die Methode
Code:
setze(int Position)
auf und markiere den Stein in der entsprechenden Klasse als besetzt.
So, nun setze ich weiter steine, und prüfe ob der gesetzte Stein eine Mühle schliesst, tut er dies bekomme ich einen boolean zurückgegeben, dass eine Mühle vorhanden ist.
Code:
muehleVorhanden = positionInMuehle(int position)
So wenn jetzt muehleVorhanden == true, dann soll der nächste Klick die Position sein, die entfernt werden soll.
Code:
nehme(int position, String farbe)
und wie gesagt, handele ich diese Abfrage mit 2 mouseListenern ab, bleibe ich in der letzten hängen und bin nur noch am entfernen...

achso: und erstmal thx 4 fast Help!!!

mfg conzo
 

zd

Bekanntes Mitglied
conzo hat gesagt.:
und wie gesagt, handele ich diese Abfrage mit 2 mouseListenern ab, bleibe ich in der letzten hängen und bin nur noch am entfernen...
du musst nur die zwei zu einem zusammenfassen, und prüfen, ob muehleVorhanden gesetzt ist (wie oben beschrieben).
wenn du noch probleme hast, dann poste doch einfach mal den code von deinen beiden mouseListenern.

mfg
 
C

conzo

Gast
Jup, ich teste das morgen früh mal, danke nochmal für die Mühe :)
wenn ich dann noch Probleme habe, melde ich mich noch...
 

Illuvatar

Top Contributor
zd hat gesagt.:
mehrere mouselistener kannst du zwar theoretisch setzten, macht aber keinen sinn, da nur "der oberste" ausgewertet wird.
sprich der zuerst (oder der zuletzt?!?) geaddete mouseListener fängt das event ab und verarbeitet es, bei den restlichen kommt nichts mehr an.

Was? Versteh ich dich falsch (hab nicht alles gelesen)? Oder ist das Schmarrn? Der Sinn von MouseListenern ist doch, dass alle ausgewertet werden, das wird in ner Collection gehalten ???:L
Man könnte consume() aufrufen, dann würden andere nicht mehr aufgerufen.
 

zd

Bekanntes Mitglied
Illuvatar hat gesagt.:
zd hat gesagt.:
mehrere mouselistener kannst du zwar theoretisch setzten, macht aber keinen sinn, da nur "der oberste" ausgewertet wird.
sprich der zuerst (oder der zuletzt?!?) geaddete mouseListener fängt das event ab und verarbeitet es, bei den restlichen kommt nichts mehr an.

Was? Versteh ich dich falsch (hab nicht alles gelesen)? Oder ist das Schmarrn? Der Sinn von MouseListenern ist doch, dass alle ausgewertet werden, das wird in ner Collection gehalten ???:L
Man könnte consume() aufrufen, dann würden andere nicht mehr aufgerufen.

ich weiss es nicht, aber ich habe das oben beschriebene verhalten einmal so beobachtet.
ich bin der sache aber nicht weiter nachgegangen, weil eine andere lösung für mich eh praktikabler war.
soweit ich mich erinnere waren aber wirklich zwei (oder mehrere) mouseListener auf dem element, reagiert hat aber nur einer. hat man diesen wieder entfernt, hat der untere das event verarbeitet.
mfg
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
I Scene Builder - mehrere Seiten AWT, Swing, JavaFX & SWT 6
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
M JavaFX JavaFX in mehrere Controller AWT, Swing, JavaFX & SWT 21
R mehrere buttons mit forschleife kreieren und individuell bearbeiten AWT, Swing, JavaFX & SWT 1
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
temi JavaFX Mehrere Views mit Stage.setScene() oder mit Scene.setRoot()? AWT, Swing, JavaFX & SWT 7
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
T Swing Tetraeder - mehrere Punkte verbinden? - Ansätze gesucht AWT, Swing, JavaFX & SWT 2
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 29
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 0
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
J JavaFX - mehrere Views, Model durchreichen AWT, Swing, JavaFX & SWT 10
it_is_all Swing Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen? AWT, Swing, JavaFX & SWT 3
M Swing Mehrere Textfelder mit ScrollBars - Größe der Felder AWT, Swing, JavaFX & SWT 0
W JavaFX Mehrere Klassen in ein TableView AWT, Swing, JavaFX & SWT 6
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
F JavaFX Mehrere Stages "managen" AWT, Swing, JavaFX & SWT 2
r4w Changelistener auf mehrere Textfelder AWT, Swing, JavaFX & SWT 5
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
S Swing Mehrere Modal-Dialoge übereinander AWT, Swing, JavaFX & SWT 5
T 2D-Grafik JFreeChart mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
C Java FX Warnmeldung: Mehrere Fonts gehören derselben Familie und Stil AWT, Swing, JavaFX & SWT 2
J Mehrere JInternalFrame; GetValues AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
KaffeeFan mehrere JTextField durchlaufen AWT, Swing, JavaFX & SWT 4
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
G JavaFX Menü und mehrere Scenes AWT, Swing, JavaFX & SWT 16
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
D Mehrere RadiButtons auswählar AWT, Swing, JavaFX & SWT 3
P Swing JTable mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
T JavaFX FXMLController für mehrere FXML? AWT, Swing, JavaFX & SWT 7
G mehrere Action-Abfolgen erfassen AWT, Swing, JavaFX & SWT 6
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
J Mehrere Hyperlinks "stilvoll" darstellen. AWT, Swing, JavaFX & SWT 1
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
S JavaFX Mehrere TreeTableView's synchron scrollen AWT, Swing, JavaFX & SWT 0
U Mehrere Oberflächeninstanzen seperat schließen AWT, Swing, JavaFX & SWT 5
J Rahmen um mehrere GUI Einzelteile AWT, Swing, JavaFX & SWT 2
S Layouts, mehrere Buttons nebeneinander AWT, Swing, JavaFX & SWT 2
M Mehrere Fenster innerhalb einer Application AWT, Swing, JavaFX & SWT 3
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
T [LWJGL] mehrere Displays? AWT, Swing, JavaFX & SWT 19
SexyPenny90 Mehrere Fenster AWT, Swing, JavaFX & SWT 2
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
Y Mehrere JSlider verlinken AWT, Swing, JavaFX & SWT 6
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
O Swing JLabel mehrere Zeilen AWT, Swing, JavaFX & SWT 2
P mehrere Rectangles per JButton AWT, Swing, JavaFX & SWT 9
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
G Mehrere Layoutprobleme AWT, Swing, JavaFX & SWT 2
Kenan89 JTable mehrere ListSelections AWT, Swing, JavaFX & SWT 2
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
A mehrere Zeilen in GUi ausgeben AWT, Swing, JavaFX & SWT 2
N Mehrere Tasks nacheinander ausführen AWT, Swing, JavaFX & SWT 7
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
M 2D-Grafik Mehrere Linien (nacheinander) übereinander Zeichnen AWT, Swing, JavaFX & SWT 6
M Mehrere JPanel nacheinander?! AWT, Swing, JavaFX & SWT 11
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
K SWT Mehrere Einträge ins Clipboard legen AWT, Swing, JavaFX & SWT 2
C Swing Ein JFrame mehrere Ansichten AWT, Swing, JavaFX & SWT 8
C Swing Mehrere JSlider sollen aufeinander reagieren AWT, Swing, JavaFX & SWT 4
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
S Mehrere JLists - Wie kennzeichnen? AWT, Swing, JavaFX & SWT 2
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
J Mehrere JRadioButtons, aber nur 1 darf ausgewählt sein AWT, Swing, JavaFX & SWT 4
L Swing Mehrere Button die selbe Größe AWT, Swing, JavaFX & SWT 4
B AWT mehrere Fenster schließen AWT, Swing, JavaFX & SWT 8
I Wie mehrere JComboBoxen in Abhängigkeit einer anderen Box ändern? AWT, Swing, JavaFX & SWT 8
G mehrere JPanel in ein (vertikales) JScrollPane AWT, Swing, JavaFX & SWT 8
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
GianaSisters Swing jTable - Feldtext soll mehrere Zeilen haben AWT, Swing, JavaFX & SWT 3
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4
D Mehrere JTabel in einem Frame positionieren AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben