PDA

View Full Version : [JAVA] - muovere rettangoli su swing con mouse


Xfight
18-10-2008, 12:29
Devo fare un piccolo programmino in java in cui sia possibile muovere un rettangolo ( già disegnato ) su un JFrame. Il mio dubbio è : come si fa Oo ?

Ho visto i vari metodi di Rectangle2D e non sono riuscito a farlo smuovere se non ottenendo una "scia" di rettangoli mentre il mio obiettivo è muoverlo senza duplicarlo.

Ho anche trovato qualche soluzione su internet ( qui (http://forums.sun.com/thread.jspa?threadID=5244274) ), però usa lo stratagemma di ripulire tutto prima di ridisegnare i cerchi spostati ( in questo esempio sono cerchi, ma poco importa ).

è l'unica tecnica possibile oppure esiste un'altra soluzione ?

p.s. nell'esempio linkato, l'utente voleva anche usare la tastiera... a me basta muoverlo con il mouse ^^

Oceans11
19-10-2008, 11:27
Devo fare un piccolo programmino in java in cui sia possibile muovere un rettangolo ( già disegnato ) su un JFrame. Il mio dubbio è : come si fa Oo ?

Ho visto i vari metodi di Rectangle2D e non sono riuscito a farlo smuovere se non ottenendo una "scia" di rettangoli mentre il mio obiettivo è muoverlo senza duplicarlo.

Ho anche trovato qualche soluzione su internet ( qui (http://forums.sun.com/thread.jspa?threadID=5244274) ), però usa lo stratagemma di ripulire tutto prima di ridisegnare i cerchi spostati ( in questo esempio sono cerchi, ma poco importa ).

è l'unica tecnica possibile oppure esiste un'altra soluzione ?

p.s. nell'esempio linkato, l'utente voleva anche usare la tastiera... a me basta muoverlo con il mouse ^^

In sostanza si fa comunque in quel modo, altrimenti i disegni vengono sovrapposti. Io non lo faccio esplicitamente, ma lascio l'onere a paintComponent di super. Eccoti un esempio:


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class MoveRectangle extends JPanel implements MouseMotionListener
{
public static final int WIDTH = 150;
public static final int HEIGHT = 75;
private int x;
private int y;

public MoveRectangle() {
addMouseMotionListener(this);
}

@Override
public void mouseDragged(MouseEvent e) {}

@Override
public void mouseMoved(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint();
}

public Dimension getPreferredSize() {
return new Dimension(600, 400);
}

protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(x, y, WIDTH, HEIGHT);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame("Move rectangle");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MoveRectangle());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
}