View Full Version : [JAVA] - muovere rettangoli su swing con mouse
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);
}
});
}
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.