MouseClickEvent während MouseDraggedEvent

Doltsche

Mitglied
Hallo community

Folgends Problem hat sich bei mir angebahnt:

Mithilfe des MouseDraggedEvent kann ich bei gedrückter linker Maustaste eine Objekt auf meinem Frame herumschieben.
Nun möchte ich gleichzeitig die Möglichkeit haben, dass Objekt mit der rechten Maustaste zu drehen. Beides funktioniert im einzelnen, aber nicht gleichzeitig. Entweder verschiebe ich das Objekt oder ich drehe es.

Wie kann dieses Problem lösen?
Ich denke an sowas wie eine Art EventQueue...

Freundliche Grüsse

Samuel
 

Matthias K.

Mitglied
Hi Samuel,
wenn du z.B. einen Frame hast, indem z.B. mit nem Canvas etwas gezeichnet wird,
müsst du, um Ereignisse von Eingabegeräten abzufragen, den Event-Handler and
den Canvas anhängen:
---->
Java:
Canvas.addKeyListener(new KeyAdapter()
		{
................

Ich hatte dein Problem mit der Tastatur.
Ich benötigte im KeyTyped-Event den Char der getippten Taste.
Dies geht aber nur bei Pressed u. Released.

Die Lösung ist der Event-Handler im Event-Handler:
Java:
public void keyTyped(KeyEvent e3) {
				Canvas.addKeyListener(new KeyAdapter()
				{
					public void keyPressed(KeyEvent e4) {
						if(gameStatus==1)
						{
.............................

Dies müsste bei den Maus-Events auch funktionieren (hatte keine Zeit ums zu testen!).
Hoffe es funktioniert.

Gruß,
Matthias
 

Doltsche

Mitglied
Hallo Matthias

Danke für deine Antwort :).

Leider beziehen sich das MouseDragged-Event und das MouseClicked-Event auf unterschiedliche Listener. Ersteres gehört zum MouseMotionListener und zweiters zum MouseListener. Das heisst, ich kann nicht das eine Event im anderen Event abhandeln.

Freundliche Grüsse

Samuel
 

Matthias K.

Mitglied
Hi Samuel,
müsste eigentlich gehen?
Hab hier mal ein kleines Bespiel:
Java:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;


public class Programm extends Canvas
{

	/**
	 * Matthias K.
	 * 22.05.2011
	 */
	
	private static int color = 0;
	private static int x = 0;
	private static int y = 0;
	
	public static void main(String[] args) {
		final Programm p = new Programm();
		JFrame f = new JFrame("");
		f.pack();
		f.setVisible(true);
		f.setLocation(0,0);
		f.setSize(300,300);
		f.add(p);
		
		
		p.addMouseMotionListener(new MouseMotionListener() {

			public void mouseDragged(MouseEvent e12) {
				//System.out.println("dragged");
				
				
				x = e12.getX();
				y = e12.getY();
				
				p.addMouseListener(new MouseListener() {
					 

					public void mouseClicked(MouseEvent e1) {
						//System.out.println("clicked");
					}


					public void mouseEntered(MouseEvent e2) {
						//System.out.println("entered");
						
					}


					public void mouseExited(MouseEvent e3) {
						//System.out.println("exited");
						
					}


					public void mousePressed(MouseEvent e4) {
						//System.out.println("pressed");
						
					}


					public void mouseReleased(MouseEvent e5) {
						//System.out.println("released");
						if(color==0)
							color = 1;
							else
							color = 0;
						
					}
		          });
				
				p.repaint(x,y, 10, 10);
							
			}

			public void mouseMoved(MouseEvent e13) {
			
			}			
		});
	}
	
	public void paint(Graphics g)
	{
		if(color==1)
		{
			g.setColor(new Color(255,0,0));
		}
		else
		{
			g.setColor(new Color(0,0,0));
		}
		
		g.drawOval(x, y, 10, 10);
		
	}

}

Mit dem kleinen Programm hier, kann man in einem Fenster bei gedrückter Maustaste zeichnen
und die Farbe mit Rechtsklick beim zeichnen ändern.

Gruß,
Matthias
 

Michael...

Top Contributor
Worin besteht denn das Problem? Auch wenn die Maus mit der linken Taste gedragged wird, reagiert der MouseListener auf Klicks der rechten Taste.
 

Michael...

Top Contributor
Sorry, das ist aber wirklich Käse ;-) Was soll das nutzten bei jedem Drag einen neuen MouseListener an das Panel zu hängen? Einmal reicht.
[JAVA=36] public void mouseDragged(MouseEvent e12) {
//System.out.println("dragged");


x = e12.getX();
y = e12.getY();

p.addMouseListener(new MouseListener() {


public void mouseClicked(MouseEvent e1) {
//System.out.println("clicked");
}


public void mouseEntered(MouseEvent e2) {
//System.out.println("entered");

}


public void mouseExited(MouseEvent e3) {
//System.out.println("exited");

}


public void mousePressed(MouseEvent e4) {
//System.out.println("pressed");

}


public void mouseReleased(MouseEvent e5) {
//System.out.println("released");
if(color==0)
color = 1;
else
color = 0;

}
});

p.repaint(x,y, 10, 10);

}

public void mouseMoved(MouseEvent e13) {

}
});
}[/code]
 

Matthias K.

Mitglied
Hi,
ja, immer bei einem Drag einen Listener anzuhängen ist komisch.
Hab es falsch verstanden.
Ich dachte, man soll nur bei einem Drag das Objekt drehen können.
War durch mein Key-Typed etwas abgedriftet.
Hier ist der verbesserte Quellcode:

Java:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;


public class Programm extends Canvas
{

	/**
	 * Matthias K.
	 * 22.05.2011
	 */
	
	private static int color = 0;
	private static int x = 0;
	private static int y = 0;
	
	public static void main(String[] args) {
		final Programm p = new Programm();
		JFrame f = new JFrame("");
		f.pack();
		f.setVisible(true);
		f.setLocation(0,0);
		f.setSize(300,300);
		f.add(p);
		

		p.addMouseListener(new MouseListener() {

			public void mouseClicked(MouseEvent e1) {
				//System.out.println("clicked");
			}


			public void mouseEntered(MouseEvent e2) {
				//System.out.println("entered");
				
			}


			public void mouseExited(MouseEvent e3) {
				//System.out.println("exited");
				
			}


			public void mousePressed(MouseEvent e4) {
				//System.out.println("pressed");
				
			}


			public void mouseReleased(MouseEvent e5) {
				//System.out.println("released");
				if(color==0)
					color = 1;
					else
					color = 0;
				
			}
          });

		p.addMouseMotionListener(new MouseMotionListener() {

			public void mouseDragged(MouseEvent e12) {
				//System.out.println("dragged");
				
				
				x = e12.getX();
				y = e12.getY();
				
				p.repaint(x,y, 10, 10);
							
			}

			public void mouseMoved(MouseEvent e13) {
			
			}			
		});
	}
	
	public void paint(Graphics g)
	{
		if(color==1)
		{
			g.setColor(new Color(255,0,0));
		}
		else
		{
			g.setColor(new Color(0,0,0));
		}
		
		g.drawOval(x, y, 10, 10);
		
	}

}

Und noch eine Frage:
Gibt es eine Möglichkeit vom Key-Typed-Event den Char der Taste zu bekommen?

Gruß,
Matthias
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Build-Zeitpunt (Datum und Uhrzeit) irgendwie während der Laufzeit zugänglich machen..? Allgemeine Java-Themen 4
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
kodela Daten während Laufzeit zugriffsbereit Allgemeine Java-Themen 15
Neumi5694 Interpreter-Fehler final Eigenschaft während Laufzeit geändert Allgemeine Java-Themen 2
Neumi5694 Compiler-Fehler Konstanten entfernen während des Kompiliervorgangs Allgemeine Java-Themen 7
A Java Klasse auf Tomcat während der Laufzeit austauschen Allgemeine Java-Themen 1
D Erhöhung der Programmgeschwindigkeit während der Programmlaufzeit Allgemeine Java-Themen 20
T Während des Programmlaufs andere Programme ausführen Allgemeine Java-Themen 1
I NullPointer während while(){} Allgemeine Java-Themen 4
H ResourceBundle während Laufzeit bearbeiten Allgemeine Java-Themen 3
A ar während der Laufzeit überschreiben Allgemeine Java-Themen 20
M File einlesen während es beschrieben wird.. Allgemeine Java-Themen 6
X Update einer Jar während der Laufzeit Allgemeine Java-Themen 8
X Button während Thread aktiv ist disablen Allgemeine Java-Themen 11
ruutaiokwu META-INF-daten bei ungepackten library-projekten während der entwicklung mit einbeziehen...? Allgemeine Java-Themen 2
J Progress Bar während Datenbank Erstellung Allgemeine Java-Themen 2
Sonecc Zugriff auf Class File einer anderen Jar während der Laufzeit Allgemeine Java-Themen 2
X Über ArrayList iterieren, während sich diese verändert Allgemeine Java-Themen 3
H Labels erstellen während Programm läuft Allgemeine Java-Themen 3
T Java - Compilieren während Laufzeit Allgemeine Java-Themen 3
P Speicherauslastung während Programm dokumentieren Allgemeine Java-Themen 3
R Drag und Drop - Fehler während Laufzeit Allgemeine Java-Themen 14
G Hibernate speichert Daten nur während Session in HSQL-DB Allgemeine Java-Themen 10
H Thread während Rechenoperation wirkt nicht Allgemeine Java-Themen 2
I Startbild anzeigen während JVM geladen wird Allgemeine Java-Themen 5
J ResourceBundle / properties-datei während der Laufzeit verän Allgemeine Java-Themen 6
M Suche , bereits während der eingabe ?? Allgemeine Java-Themen 4
M Formel in einem String während Laufzeit berechnen. Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben