AWT Maus-Events werden doppelt ausgeführt

Weltall 7

Mitglied
Hallo,
Ich habe ein seltsames Problem: bei (mindestens) einer meiner Klassen werden alle Maus-Events doppelt ausgeführt ???:L.
Ich kann leider keine wirklich hilfreichen Informationen ausser den Quelltext geben, da ich keinen Unterschied zu anderen Klassen finde. Einige Fragen kann ich aber schon im Voraus beantworten:
  • die Klasse fügt jeden Listener nur einmal hinzu (MouseListener und MouseMotionListener)
  • die Events kommen vom gleichen Objekt der Klasse (laut hashCode()), es sind also nicht zwei Container übereinander (Selbst in diesem Fall würden die Events nur von einem kommen)
Beim Mausklick erzeugt die Klasse ein Objekt einer anderen Klasse, was jetzt aber fälschlicherweise doppelt passiert. Und diese beiden Objekte sind ziemlich verschieden: das einer erzeugt keine Maus-Events, das andere dafür jeden zweimal, wie die erste Klasse.

Wenn erwünscht, kann ich noch den ganzen Quellcode posten.
 

diel2001

Bekanntes Mitglied
Ich habe eine Vermutung, da ich so ein ähnliches Problem schonmal hatte.
Das Object (auf welchem der Mauslistener liegt) ist kein Member der Klasse, sondern wird immer neu erzeugt .
So war es mal bei mir und da wurden dann auch Events doppelt ausgelöst.
Ansonsten musst du nochmal deinen Quelltext posten, damit man dir helfen kann.
 

Weltall 7

Mitglied
Ich hoffe, ich habe nich zu viel entfernt:

Java:
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.util.ArrayList;

public class KitPiece extends Container implements MouseMotionListener, MouseListener {

	private static final long serialVersionUID = -3255791332524734476L;
	
	public static final int WIDTH = 130, HEIGHT = 150;
	
	BufferedImage image;
	
	private static Color foreground = Color.black, background = Color.lightGray;
	private Rectangle imageBounds = new Rectangle(0, 0, WIDTH, HEIGHT);
	
	public KitPiece() {

		image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
		imageBounds = new Rectangle((WIDTH - 100)/2, (HEIGHT - 100)/2 + 15, image.getWidth(), image.getHeight());
		
		Label nameLabel = new Label("Name");
		nameLabel.setBounds(5, 5, WIDTH - 10, 25);
		nameLabel.setFont(Editor.arial18px[0]);
		nameLabel.setAlignment(Label.CENTER);
		nameLabel.setBackground(background);
		nameLabel.setForeground(foreground);
		this.add(nameLabel);
		
		this.setBounds(0, 0, WIDTH, HEIGHT);

		addMouseMotionListener(this);
		addMouseListener(this);
	}

	@Override
	public void paint(Graphics g) {
		g.setColor(background);
		g.fillRoundRect(1, 1, WIDTH - 2, HEIGHT - 2, 20, 20);
		g.setColor(foreground);
		g.drawRoundRect(0, 0, WIDTH - 1, HEIGHT - 1, 20, 20);
		
		g.drawImage(image, imageBounds.x, imageBounds.y, null);
		
		this.paintComponents(g);
	}
	
	@Override
	public void mouseDragged(MouseEvent e) {
		System.out.println("drag");
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub
	}
	
	@Override
	public void mouseClicked(MouseEvent e) {
		System.out.println("click");
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		System.out.println("enter");
	}

	@Override
	public void mouseExited(MouseEvent e) {
		System.out.println("exit");
	}

	@Override
	public void mousePressed(MouseEvent e) {
		System.out.println("press");
	}
	
	@Override
	public void mouseReleased(MouseEvent e) {
		System.out.println("release");
	}
}
 

XHelp

Top Contributor
Also bei mir kommen die Events wie die sollen.
Kann es sein, dass du bei "click" und bei "press+release" einfach nur das gleiche machst?
 

Weltall 7

Mitglied
ne...
ausserdem kommt das
Code:
System.out.println("mouse pressed on " + this.toString());
zweimal
Java:
	@Override
	public void mousePressed(MouseEvent e) {
		System.out.println("mouse pressed on " + this.toString());
		if (imageBounds.contains(e.getPoint())) {
			Editor.draggedPiece = this.createEditorPiece(e.getPoint());
		}
		
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		if (Editor.draggedPiece != null) {//weil Ziehen ausserhalb des Bildes nix macht
			Point p = e.getPoint();
			p.x = p.x + this.getX() + Editor.kit.getX() + Editor.tools.getX() - Editor.draggedPiece.getX();
			p.y = p.y + this.getY() + Editor.kit.getY() + Editor.tools.getY() - Editor.draggedPiece.getY() - Editor.APPLETHEIGHT;//<= wieso - Editor.APPLETHEIGHT?
			Editor.draggedPiece.moved(p);
		}
	}
	
	@Override
	public void mouseReleased(MouseEvent e) {
		if (Editor.draggedPiece != null) {
			if (Editor.canvas.contains(e.getX() + this.getX() + Editor.kit.getX() - Editor.canvas.getX(), e.getY() + this.getY() + Editor.kit.getY() - Editor.canvas.getY())) {
				Editor.draggedPiece.getParent().remove(Editor.draggedPiece);
				Canvas.addPiece(Editor.draggedPiece);
				Editor.draggedPiece.setLocation(Editor.draggedPiece.getX() - Editor.canvas.getX() - Editor.draggedPiece.getParent().getX(), Editor.draggedPiece.getY() - Editor.canvas.getY() - Editor.draggedPiece.getParent().getY());
				Editor.draggedPiece.calculatePosition();
			} else {
				Editor.draggedPiece.getParent().remove(Editor.draggedPiece);
			}
			Editor.draggedPiece = null;
			Editor.getEditor().paint();
		}
	}
 

XHelp

Top Contributor
Was ist denn Editor.
Im großen und ganzen kann ich deinen Fehler nicht reproduzieren.
Stell einen Code rein (mit main etc), den ohne weiteren Kompiliert und zum Fehler führt.
 

Weltall 7

Mitglied
Ich hab mal mein ganzes Projekt im Anhang, bis auf die Schriftartdatei arial.ttf, die war zu gross zum hochladen.
Wichtig: das Applet Editor ausführen, nicht den Player

edit: Ich muss jetzt leider gehen, sonst werden meine Eltern noch wütend...
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Kommentiere in
Code:
MyContainer
die 12 Zeile:
[JAVA=12]
this.addMouseListener(this);
[/code]
aus und TADA....
 

Weltall 7

Mitglied
Danke, das hat das Problem behoben.
Die Klasse MyContainer habe ich zu debug-Zwecken erstellt, weil vorher gar nichts ging. Wenn ich die Klasse jetzt wegmache, funktionert der Rest aber fast vollständig o_O. Nur bekommen meine EditorPieces gar keine MouseEvents...
 

Weltall 7

Mitglied
Bin gerde auf was selstames gestossen: wenn ich ein EditorPiece, welches negative x- und y-Koordinaten hat, anklicke, bekommt es die Kooridnaten (0,0) ???:L
Das sollte zwar so sein, aber wieso geht das ohne MouseEvents...?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Linie mit der Maus auswählen AWT, Swing, JavaFX & SWT 5
B mit maus Objekt bewegen AWT, Swing, JavaFX & SWT 3
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
T Timer und GIF Animationen pausieren während Maus sich bewegt AWT, Swing, JavaFX & SWT 4
M Bild in JPanel mit Maus einfügen AWT, Swing, JavaFX & SWT 0
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
L 2D-Grafik Bild in Richtung Maus drehen AWT, Swing, JavaFX & SWT 18
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
A JFrame Größenänderung mit Maus und GridLayout AWT, Swing, JavaFX & SWT 10
J Maus "locken" für Menü AWT, Swing, JavaFX & SWT 8
D Grafiken an Maus anhängen AWT, Swing, JavaFX & SWT 2
P Pfeilpolygon per Maus rotierbar machen - Kleine Schwierigkeiten AWT, Swing, JavaFX & SWT 29
P Event Handling Gedrückte Maus Blockiert MausEvents AWT, Swing, JavaFX & SWT 2
R Swing Per Maus JLabel resizen AWT, Swing, JavaFX & SWT 6
F Maus von alleine bewegen! AWT, Swing, JavaFX & SWT 8
G Swing JPanel per Maus verschieben AWT, Swing, JavaFX & SWT 5
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
C AWT Mausbarriere Maus fangen AWT, Swing, JavaFX & SWT 10
J "Auswahlfenster" mit Maus auf JLabel zeichnen AWT, Swing, JavaFX & SWT 4
W Swing Bild zeichnen wenn Maus an bestimmter Position ist AWT, Swing, JavaFX & SWT 4
J Inaktivität von Maus und Tastatur AWT, Swing, JavaFX & SWT 4
G AWT Images aus Imagearray an die Maus pappen und bewegen AWT, Swing, JavaFX & SWT 4
F Element anzeigen / erstellen. Maus vs Controller AWT, Swing, JavaFX & SWT 7
M 3D-Grafik Bewegung mit der Maus ohne Klicken AWT, Swing, JavaFX & SWT 10
F Swing Objekte mit Maus verschieben AWT, Swing, JavaFX & SWT 8
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
Y AWT Maus Koordinaten abspeichern in eine Textfile AWT, Swing, JavaFX & SWT 3
C permanente aktualisierung der Koordinaten der Maus auf einem Panel AWT, Swing, JavaFX & SWT 8
J maus festlegen AWT, Swing, JavaFX & SWT 6
C paintComponent mit Maus verschieben - wie? AWT, Swing, JavaFX & SWT 2
T Swing JComboBox: Listeneinträge mit der Maus verschieben AWT, Swing, JavaFX & SWT 5
O JSlider - wie unterscheide ich mit Maus verändert und durch setValue verändert. AWT, Swing, JavaFX & SWT 16
W Swing Maus Rastersprung AWT, Swing, JavaFX & SWT 3
S Swing JTable Auswahl mehrerer Zellen mit STRG+Maus AWT, Swing, JavaFX & SWT 3
E Hilfetext anzeigen beim Überfahren mit der Maus AWT, Swing, JavaFX & SWT 3
G Maus über Button AWT, Swing, JavaFX & SWT 3
S Funktion nur ausführen, wenn Maus über Componente ist AWT, Swing, JavaFX & SWT 2
G Listenelemente mit der Maus verschieben AWT, Swing, JavaFX & SWT 4
B kein MouseEvent bei zu schneller Bewegung der Maus AWT, Swing, JavaFX & SWT 7
B JTable - Wechsel der Spalte bei TAB, RETURN oder Maus AWT, Swing, JavaFX & SWT 5
D Mit der Maus in verschiedene Modi wechseln AWT, Swing, JavaFX & SWT 15
Z Buttons erscheinen erst wenn man mit der Maus drüber geht AWT, Swing, JavaFX & SWT 7
G Elemente erst da wenn mit Maus drüber gefahren bin AWT, Swing, JavaFX & SWT 2
M Kreis mit gedrückter Maus bewegen AWT, Swing, JavaFX & SWT 20
F Größenänderung mittels Maus - selbst implementieren? AWT, Swing, JavaFX & SWT 3
R Einstellen der Maus Rad Geschwindigkeit beim Scrollen AWT, Swing, JavaFX & SWT 3
G Kreis zeichnen und mit Maus ziehen AWT, Swing, JavaFX & SWT 3
W Maus Rahmen zeichnen AWT, Swing, JavaFX & SWT 10
A JFileChooser - Mehrere Dateien per Maus markieren (nokeys) AWT, Swing, JavaFX & SWT 7
V JTable Handling Fokus on Keystroke und Maus Doubleclick AWT, Swing, JavaFX & SWT 9
R JTable: Maus-Click ohne Datensätze AWT, Swing, JavaFX & SWT 9
L Größe von Komponenten im Nulllayout mit der Maus verändern. AWT, Swing, JavaFX & SWT 2
J Context Menü Maus AWT, Swing, JavaFX & SWT 3
G JTable selektion der Zeile bei Fokusieren mit der Maus AWT, Swing, JavaFX & SWT 5
T mousemoved abfrage - aber welches event wenn maus weg? AWT, Swing, JavaFX & SWT 2
lin Frame bei Drücken eines Buttons mit Maus verschieben AWT, Swing, JavaFX & SWT 7
G [AWT] Zeichnungen per Maus auswählen AWT, Swing, JavaFX & SWT 8
D Ne Maus Event Frage AWT, Swing, JavaFX & SWT 4
D Polygon mit der Maus zeichnen AWT, Swing, JavaFX & SWT 2
M Zusätzlichen Maus-Klick erzeugen AWT, Swing, JavaFX & SWT 4
G mouse events AWT, Swing, JavaFX & SWT 6
Heldderschatten Java Events und Interfaces AWT, Swing, JavaFX & SWT 18
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
D Swing Events vom JLayer abfangen AWT, Swing, JavaFX & SWT 2
D Transparentes Hauptfenster Events AWT, Swing, JavaFX & SWT 1
M Swing Hinter die Kulissen von Events (addActionListener) AWT, Swing, JavaFX & SWT 6
N JTextArea Events weiterleiten AWT, Swing, JavaFX & SWT 3
R SWT Eigene Events erstellen und werfen AWT, Swing, JavaFX & SWT 59
S Mouse Events in einer sortierten JTable unterscheiden AWT, Swing, JavaFX & SWT 18
C Swing Simulation von Drag and Drop Events AWT, Swing, JavaFX & SWT 3
J Events und Sleep? AWT, Swing, JavaFX & SWT 4
C MouseMotionListener fired keine Events mehr wenn in Button AWT, Swing, JavaFX & SWT 2
E JFace ListSelectionDialog & Mouse-Events? AWT, Swing, JavaFX & SWT 2
N Variablen in Events AWT, Swing, JavaFX & SWT 4
P AWT MouseListener unklare abhandlung von Events AWT, Swing, JavaFX & SWT 3
L Swing Auslöser eines Events finden? AWT, Swing, JavaFX & SWT 6
R JTable - eigener Editor - Mouse events AWT, Swing, JavaFX & SWT 2
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
0 Events werden nicht ausgelöst AWT, Swing, JavaFX & SWT 2
V Swing Auslösen von zwei Events hintereinander AWT, Swing, JavaFX & SWT 4
T Swing Control und Events AWT, Swing, JavaFX & SWT 8
MrMilti Gezeichnete Java2D Elemente mit Events versehen AWT, Swing, JavaFX & SWT 3
R Events - Nur auf eines reagieren AWT, Swing, JavaFX & SWT 3
T JComboBox: ActionListener/ItemListener wie nur auf bestimmte Events reagieren? AWT, Swing, JavaFX & SWT 7
B Swing setDefaultButton geht nicht - Komponente fängt Events ab AWT, Swing, JavaFX & SWT 5
R Key und Mouse Events AWT, Swing, JavaFX & SWT 2
K Alle Events abfangen mit GlassPane AWT, Swing, JavaFX & SWT 7
T SWT - Table Events AWT, Swing, JavaFX & SWT 3
hdi Events nicht plattform-unabhängig? AWT, Swing, JavaFX & SWT 14
M SWT: eigene Events AWT, Swing, JavaFX & SWT 9
G Reihenfolge von Events AWT, Swing, JavaFX & SWT 4
D Events bei Tabs in einem Editor AWT, Swing, JavaFX & SWT 2
F Probleme mit MouseWheel events in SWT AWT, Swing, JavaFX & SWT 13
M Globale Events in Windows abfangen AWT, Swing, JavaFX & SWT 2
T Hilfe zu Events? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben