Mouseevent Vorrang

AcridMusak

Mitglied
Hi Leute,
hab mal ein kleines anliegen, und zwar hab ich mir ein kleines Spielfeld gebaut, wobei sich der Status einer Zelle auf diesem Feld sowohl über mouseClicked(e) als auch über mousePressed(e) verändern lassen soll.
Mein Problem ist jetzt, das ich nicht mehr normal klicken kann sondern anscheinend die mousePressed() Methode den Vorrang vor mouseClicked() hat, ich es aber anders herum benötige, gibt es da eine Möglichkeit, oder muss ich mir da was anderes ausdenken?
Vielleicht kann mir einer von euch helfen, danke.
 
N

nillehammer

Gast
Mein Problem ist jetzt, das ich nicht mehr normal klicken kann sondern anscheinend die mousePressed() Methode den Vorrang vor mouseClicked() hat, ich es aber anders herum benötige, gibt es da eine Möglichkeit, oder muss ich mir da was anderes ausdenken?
Vielleicht kann mir einer von euch helfen, danke.
Ich denke, Du wirst Dir was überlegen müssen. MousePressed wird ausgelöst, wenn der Zeigefinger den Mouseknopf runterdrückt (und vielleicht sogar gedrückt hält). MouseClicked wird erst ausgelöst, wenn der Mouseknopf wieder losgelassen wird. Insofern kommt das MousePressed-Event IMMER vor MouseClicked.
 
N

nillehammer

Gast
Kann es dann sein, das ich über mouseReleased() die mouseClicked() Methode aufrufen kann?
Mach sowas bloß nicht! Das sind Event-Handler Methoden, die von der Umgebung aufgerufen werden, wenn die Events auftreten. Du selbst legst nur fest, was passieren soll, aber rufst sie nicht selbst auf. (Mal abgesehen davon, dass ich spontan auch garnicht wüsste, wie Du die benötigten MouseEvents selbst erzeugst.)

Und nützen wird Dir das auch nichts, denn mousePressed() ist nunmal immer das erste, was passiert.
 

AcridMusak

Mitglied
Ok dann werde ich mir mal was anderes ausdenken.;(
Mach sowas bloß nicht! Das sind Event-Handler Methoden, die von der Umgebung aufgerufen werden, wenn die Events auftreten.
Nur mal so aus Interesse, da ich noch nicht so viel Erfahrung habe, hat das einen bestimmten Grund warum man das nicht machen sollte?
 
N

nillehammer

Gast
Nur mal so aus Interesse, da ich noch nicht so viel Erfahrung habe, hat das einen bestimmten Grund warum man das nicht machen sollte?
Erst Mal eine reine Stilfrage. Du missbrauchst eine Methode, die für einen bestimmten Zweck gedacht ist. Jemand anders (oder Du selbst in einem Jahr) liest Deinen Code und erwartet sowas nicht, sucht vielleicht nach Fehlern und ärgert sich.

Zweitens Du erzeugst den MouseListener und registrierst ihn bei irgendwelchen Komponenten, auf die geklickt werden kann. Wenn Du ihn gleichzeitig selbst für Methodenaufrufe benutzen willst, musst Du ihn Dir in irgend einer Variablen merken. Auch diese Variable dürfte den Zukunfts-Programmierer verwirren.

Drittens für den Aufruf bräuchtest Du ein MouseEvent. Ich hab zwar nicht geschaut, wüsste jetzt aber spontan nicht, wie man das selbst erzeugt. Du könntest natürlich null übergeben, dann musst Du innerhalb der Methode aber darauf prüfen. Wieder was, was eigentlich nicht nötig ist, weil Du die Methode missbrauchst.

Die Frage ist was Du machen möchtest (eventuell was mit Drag and Drop?). Vielleicht gibt es ja eine Alternative.
 

AcridMusak

Mitglied
Nein es ist kein Drag and Drop. Es is ein Game of Life mit GUI, Programmieraufgabe aus der Uni. Wir sollen das so machen, das man dann Zellen einzeln anwählen kann oder per mousePressed() auch einfach über das Spielfeld fährt und so mehrere Zellen anwählt. Soweit funktioniert das auch, nur die erste Zelle die ich anwähle wird nur fest markiert wenn ich gedrückt mit der Maus ziehe, aber bei ruhiger Maus, also Einzelauswahl, wird sie nicht fest markiert. Das ist mein Problem und das muss ich noch irgendwie ausbügeln.
 

bERt0r

Top Contributor
Naja, dafür gibts die Funktion mouseDragged, die wird immer aufgerufen, sobald du deine Maus mit gedrückter Maustaste einen Pixel bewegst (also ziemlich oft).
 
T

tröööt

Gast
@TO
hmm ... grundlagen sollte man können ...

vieles wurde genannt was ich jetzt nicht wiederholen muss / will / darf ... aber auch wenn es kein drag'n'drop in dem sinne ist wirst du nur mit einem MouseListener nicht sehr weit kommen ...
denn dieser stellt dir nur methoden bereit um auf maus-klicks (in der FESTEN reihenfolge pressed - released - clicked) und auf hovern (also maus fährt über eine component bzw verlässt diese wieder) zu reagieren ...
du brauchst also um auf bewegungen zu reagieren noch mindestens den MouseMotionListener ..
und wenn man in dessen doc nachliest hat dieser zwei methoden ...
mouseMoved() reagiert nur auf das bewegen wenn KEINE taste gedrückt ist ...
mouseDragged() hingegen nur wenn mindestens eine taste gedrückt gehalten und dabei die maus bewegt wird ... und das ist ja im endeffekt das was du suchst ...
 

AcridMusak

Mitglied
Habs jetzt, der Punkt ist der das ich die mouseClicked Methode garnicht verwende.
Mit mousePressed führe ich quasi die gewünschte Aktion einmal direkt auf der Ersten Zelle aus und dann mit mouseEntered auf jeder Zelle über die man drüberzieht.
Code:
                    @Override
                    public void mouseClicked(MouseEvent e) {
                        // TODO Auto-generated method stub
                    }
                   
                    @Override
                    public void mouseEntered(MouseEvent e) {
                        if (statusOfLeftMouseButton) {
                            if (colorOfStartCell) {
                                if (cell.getBackground() == Color.BLUE) {
                                    cell.setBackground(Color.LIGHT_GRAY);
                                }
                            } else {
                                if (cell.getBackground() == Color.LIGHT_GRAY) {
                                    cell.setBackground(Color.BLUE);
                                }
                            }
                            updateGameField();//
                        }
                    }
                   
                    @Override
                    public void mouseExited(MouseEvent e) {
                        // TODO Auto-generated method stub
                    }
                   
                    @Override
                    public void mousePressed(MouseEvent e) {
                        if (cell.getBackground() == Color.BLUE) {
                            cell.setBackground(Color.LIGHT_GRAY);
                            colorOfStartCell = true;
                        } else {
                            cell.setBackground(Color.BLUE);
                            colorOfStartCell = false;
                        }
                        updateGameField();
                        statusOfLeftMouseButton = true;
                    }
                   
                    @Override
                    public void mouseReleased(MouseEvent e) {
                        statusOfLeftMouseButton = false;
                    }
                });
 

bERt0r

Top Contributor
Hallo? Hast du irgendwas von den letzten 2 Posts nicht verstanden? mouseClicked wird nur aufgerufen wenn man auf der gleichen Mausposition die Taste drückt und dann wieder loslässt. Das krieg ich nichtmal jedesmal hin wenn ichs machen will.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
padde479 MenuItem MouseEvent/-Listener AWT, Swing, JavaFX & SWT 5
MouseEvent richtig initialisieren AWT, Swing, JavaFX & SWT 1
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
C MouseEvent JavaFX AWT, Swing, JavaFX & SWT 4
L MouseEvent-Konflikt AWT, Swing, JavaFX & SWT 1
S JavaFX Unterschied MouseEvent und ActionEvent AWT, Swing, JavaFX & SWT 3
X Swing MouseEvent auslösen AWT, Swing, JavaFX & SWT 3
C MouseEvent AWT, Swing, JavaFX & SWT 8
R MouseEvent.getX() liefert in Applet Screen-Koordinate AWT, Swing, JavaFX & SWT 2
T JLabel adden bei einem MouseEvent AWT, Swing, JavaFX & SWT 2
F AWT MouseEvent - consume() funktioniert nicht AWT, Swing, JavaFX & SWT 6
S JButton + MouseEvent AWT, Swing, JavaFX & SWT 2
J Swing JButton und MouseEvent AWT, Swing, JavaFX & SWT 2
C Swing Problem mit MouseEvent in JTable AWT, Swing, JavaFX & SWT 5
L "Fremdes" JPanel von MouseEvent aus Ändern AWT, Swing, JavaFX & SWT 2
F MouseEvent bei PopupMenu abfangen AWT, Swing, JavaFX & SWT 2
B Button identifizieren unter MouseEvent AWT, Swing, JavaFX & SWT 7
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
B mouseReleased(MouseEvent m) überflüssig? AWT, Swing, JavaFX & SWT 2
E MouseEvent von Kindelementen abfangen AWT, Swing, JavaFX & SWT 2
S Zugriff auf statische Var in MouseEvent -> Warnung AWT, Swing, JavaFX & SWT 6
A Problem mit Jframe und mouseevent AWT, Swing, JavaFX & SWT 10
B kein MouseEvent bei zu schneller Bewegung der Maus AWT, Swing, JavaFX & SWT 7
R JButton in JList - MouseEvent-Problem AWT, Swing, JavaFX & SWT 12
A MouseEvent auf Container bzw. Frame weiterleiten AWT, Swing, JavaFX & SWT 5
M mouseEvent an darunterliegende Komponenten weiterleiten AWT, Swing, JavaFX & SWT 2
M MouseEvent JButton Taschenrechner AWT, Swing, JavaFX & SWT 5
X MouseEvent selber auslösen AWT, Swing, JavaFX & SWT 12
H mouseEvent AWT, Swing, JavaFX & SWT 6
G jList + mouseevent (rechtsklick) AWT, Swing, JavaFX & SWT 1
G MouseEvent beenden AWT, Swing, JavaFX & SWT 17
G MouseEvent Problem mit JFrame über einen modalen JDialog AWT, Swing, JavaFX & SWT 3
G JTree MouseEvent AWT, Swing, JavaFX & SWT 6
M MouseEvent in der EventQueue vor versetzen AWT, Swing, JavaFX & SWT 4
sliwalker MouseEvent,JKomponente aus Array: Wie bekommt man den Index AWT, Swing, JavaFX & SWT 2
H MouseEvent bei Drag & Drop (mittels TransferHandler) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben