Canvas & MouseMotion probleempje

Status
Niet open voor verdere reacties.

GoliathBT

Nieuwe gebruiker
Lid geworden
22 jan 2007
Berichten
3
Het gaat over deze applet.

De bedoeling is dat de blokjes gewoon over het hele 'scherm' verplaatst kunnen worden. Nu gaat dat deels, maar niet heel soepel & ook op twee plekken tegelijk. (zo lijkt het.)

De code:

Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
 
public class Squares extends Applet
{
    private Square square1, square2, square3;
    
    public void init()
    {
        square1 = new Square();
        square2 = new Square();
        square3 = new Square();
        add( square1 );
        add( square2 );
        add( square3 );
    }
}
 
class Square extends Canvas
{
    int x, y;
    
    public Square() 
    {
        setSize( 100, 50 );
        addMouseMotionListener( new MouseMotionHandler() );
    }
 
    public void paint( Graphics g )
    {
        g.drawRect( 0, 0, 99, 49 );
        g.setColor( Color.blue );
        g.fillOval( 0, 0, 60, 30 );
    }
    
    public void setXY( int x, int y )
    {
        this.x = x;
        this.y = y;
        this.setLocation( x, y );
    }
        
    class MouseMotionHandler extends MouseMotionAdapter
    {
        public void mouseDragged( MouseEvent e )
        {
            setXY( e.getX(), e.getY() );
        }
    }
}
 
Laatst bewerkt:
Update. Ik ben al een stukje verder gekomen. Heb bovenstaande post ge-edit.
De vraag is dus, hoe krijg ik ze soepel bewogen. :rolleyes:
 
Voor elk van de squares staat in de paint() methode nog steeds hardcoded de plaats waar ze getekend moeten worden. Gebruik hierin ook eens de variabelen x en y. Ik heb het niet getest, maar neem aan dat de applet op de site waar je naar verwijst de implementatie van deze code is.
 
Klopt, het gaat over die applet.
Alleen zodra je die x & y wijzigt, wijzig je ze binnen die canvas.

En aangezien het juist de canvassen zelf zijn die je moet bewegen, ging dat niet op.
Ik ben er uit eindelijk uit gekomen door dit stukje:

Code:
	public void mouseDragged(MouseEvent me)
	{
		location = getLocation(location);
		int x = location.x - pressed.getX() + me.getX();
		int y = location.y - pressed.getY() + me.getY();
		setLocation(x, y);
	 }

Toch bedankt voor je reactie :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan