Verschieben von Elementen

Status
Nicht offen für weitere Antworten.

Evolver

Bekanntes Mitglied
Ich habe auf meiner graphischen Oberfläche Elemente, die man mit der Mouse verschieben kann (so wie z.b. Fenster bei Windows). Das klappt auch soweit, aber nur, wenn ich die Mouse nicht zu schnell bewege! Das komische ist aber, selbst wenn ich sie schnell bewege klaptt es, solange ich das Objekt nach unter, links oder rechts verschiebe. Will ich es aber schnell nach oben schieben, bleibt es immer wieder hängen.

Hier ein bisschen Code:
Java:
public class MoveObject extends Rectangle implements ...
{
	private static final int NO_DRAG = -1;
	private int dragOriginX;
	private int dragOriginY;

	private Rectangle titleBar;

	// ...

	// Verschieben starten
	public void handleMousePressed( MouseEvent event )
	{
		if( contains( event.getX(), event.getY() ) )
		{			
			if( titleBar.contains( event.getX(), event.getY() ) )
			{
				dragOriginX = event.getX();
				dragOriginY = event.getY();
			}
		}
	}

	// Verschieben stoppen
	public void handleMouseReleased( MouseEvent event )
	{
		if( contains( event.getX(), event.getY() ) )
		{
			if( dragOriginX!=NO_DRAG || dragOriginY!=NO_DRAG )
			{
				dragOriginX = NO_DRAG;
				dragOriginY = NO_DRAG;
			}
		}
	}

	// Verschieben
	public void handleMouseDragged( MouseEvent event )
	{
		if( contains( event.getX(), event.getY() ) )
		{			
			if( dragOriginX!=NO_DRAG || dragOriginY!=NO_DRAG )
			{
				int deltaX = event.getX() - dragOriginX;
				int deltaY = event.getY() - dragOriginY;
				dragOriginX = event.getX();
				dragOriginY = event.getY();
				x += deltaX;
				y += deltaY;
				titleBar.x += deltaX;
				titleBar.y += deltaY;
			}
		}
	}
}
Da der ganze Rest recht komplex geworden ist, es wäre also ziemlich schwierig, das als ein kleines eigenständiges Beispiel herauszulösen. Aber vielleicht sieht ja auch so jeamdn einen Fehler oder hat eine Idee?
 
S

SlaterB

Gast
Logging Logging Logging, Logging Logging Logging, Logging Logging Logging

in einer Methode wie handleMouseDragged() kannst du doch genau feststellen, welches aktuelle x,y von der Maus kommt,
ob contains das akzeptiert, was dragOrigin + x,y + titleBar x.y war und neu sein wird
(interessant für das nächste Event)

ich vermute, dass du bei zu schnellen Bewegungen außerhalb des contains()-Bereich bist, was immer das auch für ein Bereich ist,
nach oben besonders empfindlich, da dort schnell die Grenze erreicht ist,

du solltest auch die umgebende Fläche mit einberechnen, wenn das Rechteck z.B. in der Zeichenfläche an Position
200,100 ist und ein Drag um 70 Pixel nach oben relativ zur Position des Rechtecks zu einem y von -60 führt, also außerhalb, contains=false, dann ist das als Bewegung immer noch ok,

du musst also z.B. prüfen, ob x,y des Rechtecks + event.getX()/Y innerhalb der Grenzen der äußeren Fläche liegt
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben