Mouse event
Ano1994
Messages postés
45
Statut
Membre
-
ghFrankfurt Messages postés 227 Statut Membre -
ghFrankfurt Messages postés 227 Statut Membre -
Salut tout le monde !
voila je viens de réaliser une toute petite application paint avec java, des maintenant j'ai pu réaliser une petite interface qui permet a dessiner pas mal d'objets qui sont déja définits. bon mon problème c'est que je veux donner la possibilité de faire glisser ces objets sur l'interface, cad si je clique et je tire tjrs en cliquant, l'objet va changer de positionner selon où je déplace le curseur.
chaque objet est déplacé par un Point(x,y), qui fait parti de ces attributs, je veux la fonction qui permet de changer ces x et y quand je clique sur l'objet o je tire. j'ai la fonction qui permet de vérifier si le point où je clique appartient à l'objet ou pas, je veux celle de la souris!
c urgent SVP, je dois le terminer dans 2 jours :(
et merci a vous !
voila je viens de réaliser une toute petite application paint avec java, des maintenant j'ai pu réaliser une petite interface qui permet a dessiner pas mal d'objets qui sont déja définits. bon mon problème c'est que je veux donner la possibilité de faire glisser ces objets sur l'interface, cad si je clique et je tire tjrs en cliquant, l'objet va changer de positionner selon où je déplace le curseur.
chaque objet est déplacé par un Point(x,y), qui fait parti de ces attributs, je veux la fonction qui permet de changer ces x et y quand je clique sur l'objet o je tire. j'ai la fonction qui permet de vérifier si le point où je clique appartient à l'objet ou pas, je veux celle de la souris!
c urgent SVP, je dois le terminer dans 2 jours :(
et merci a vous !
A voir également:
- Mouse event
- Move mouse - Télécharger - Utilitaires
- Ghost mouse - Télécharger - Divers Utilitaires
- Mouse lock - Télécharger - Sécurité
- Automatic mouse and keyboard - Télécharger - Divers Utilitaires
- Mouse and keyboard recorder - Télécharger - Divers Utilitaires
2 réponses
Voici un exemple. Il tremble un peu mais ça doit pouvoir se corriger.
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.IOException;
import javax.swing.JFrame;
abstract class Moveable extends Component
{
private static final long serialVersionUID = 1;
private Point temp;
public Moveable(int x0, int y0)
{
setLocation(x0,y0);
addMouseListener(new MouseListener()
{
@Override
public void mousePressed(MouseEvent e)
{
temp = e.getPoint();
}
@Override public void mouseClicked(MouseEvent e) {}
@Override public void mouseEntered(MouseEvent e) {}
@Override public void mouseExited(MouseEvent e) {}
@Override public void mouseReleased(MouseEvent e) {}
});
addMouseMotionListener(new MouseMotionListener()
{
@Override
public void mouseDragged(MouseEvent e)
{
setLocation(getX()+e.getX()-temp.x, getY()+e.getY()-temp.y);
temp = e.getPoint();
}
@Override public void mouseMoved(MouseEvent e) {}
});
}
@Override
public abstract void paint(Graphics g);
}
class Circle extends Moveable
{
private static final long serialVersionUID = 1;
private int r;
public Circle(int x0, int y0, int r)
{
super(x0, y0);
this.r = r;
}
@Override
public void paint(Graphics g)
{
g.drawOval(getX(), getY(), r, r);
}
}
public final class Test
{
public static void main(String[] args) throws IOException
{
JFrame frame = new JFrame();
frame.getContentPane().add(new Circle(50,50,100));
frame.setSize(300,300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}La confiance n'exclut pas le contrôle
est-ce que je suis obligé d'utiliser l'héritage? par-ce que ma classe de l'objet est déja héritée d'une autre ?
public class Circle extends Figure{
int ray;
Point ctr;
Circle()
{
super();
this.ray=0;
ctr= new Point ();
}
Circle(int x1,int y1,int r)
{
super();
this.ctr = new Point(x1,y1);
this.ray=r;
}
void setLocation(int x1,int y1)
{
this.ctr.setLocation(x1, y1);
}
void setRayon(int r)
{
this.ray=r;
}
Point getLocation()
{
return ctr;
}
int getRayon()
{
return ray;
}
void draw(Graphics g)
{
g.setColor(getColor());
g.drawOval(ctr.x - ray, ctr.y - ray, ray*2, ray*2);
}
boolean contains(int x,int y)
{
int R;
R=ray*ray;
if (R==(x-ctr.x)*(x-ctr.x)-(y-ctr.y)*(y-ctr.y))
return true;
else
return false;
}
}
et dans la classe de la fenetre :
public class Window1 extends JFrame implements java.awt.event.MouseListener{
Circle C1 = new Circle(310,235,160);
Circle C2 = new Circle(240,155,30);
Circle C3 = new Circle(370,155,30);
public void paint(Graphics g)
{
super . paint( g );
C1.setColor(Color.RED);
C2.setColor(Color.RED);
C3.setColor(Color.RED);
R1.setColor(Color.BLUE);
L1.setColor(Color.BLACK);
L2.setColor(Color.BLACK);
C1.draw(g);
C2.draw(g);
C3.draw(g);
R1.draw(g);
L1.draw(g);
L2.draw(g);
}
public Window1()
{
this.setTitle("Paint Java");
//this.setSize(800, 500);
this.setSize(1200, 700);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addMouseListener ( this ) ;
this.setVisible(true);
}
public void mouseClicked ( java.awt.event.MouseEvent ev )
{
// je sais pas
}
}
public class Circle extends Figure{
int ray;
Point ctr;
Circle()
{
super();
this.ray=0;
ctr= new Point ();
}
Circle(int x1,int y1,int r)
{
super();
this.ctr = new Point(x1,y1);
this.ray=r;
}
void setLocation(int x1,int y1)
{
this.ctr.setLocation(x1, y1);
}
void setRayon(int r)
{
this.ray=r;
}
Point getLocation()
{
return ctr;
}
int getRayon()
{
return ray;
}
void draw(Graphics g)
{
g.setColor(getColor());
g.drawOval(ctr.x - ray, ctr.y - ray, ray*2, ray*2);
}
boolean contains(int x,int y)
{
int R;
R=ray*ray;
if (R==(x-ctr.x)*(x-ctr.x)-(y-ctr.y)*(y-ctr.y))
return true;
else
return false;
}
}
et dans la classe de la fenetre :
public class Window1 extends JFrame implements java.awt.event.MouseListener{
Circle C1 = new Circle(310,235,160);
Circle C2 = new Circle(240,155,30);
Circle C3 = new Circle(370,155,30);
public void paint(Graphics g)
{
super . paint( g );
C1.setColor(Color.RED);
C2.setColor(Color.RED);
C3.setColor(Color.RED);
R1.setColor(Color.BLUE);
L1.setColor(Color.BLACK);
L2.setColor(Color.BLACK);
C1.draw(g);
C2.draw(g);
C3.draw(g);
R1.draw(g);
L1.draw(g);
L2.draw(g);
}
public Window1()
{
this.setTitle("Paint Java");
//this.setSize(800, 500);
this.setSize(1200, 700);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addMouseListener ( this ) ;
this.setVisible(true);
}
public void mouseClicked ( java.awt.event.MouseEvent ev )
{
// je sais pas
}
}
Tu peux très bien faire une classe Figure comme tu l'as fait, une classe intermédiaire MoveableFigure extends Figure, qui définit les deux Listeners qui permettent de déplacer ta figure, puis la classe finale Circle extends MoveableFigure qui reprendrait nos deux classes Circle.
Mais faire un JFrame implements MouseListener n'est pas vraiment judicieux, il vaut mieux faire des Listener dans la classe des figures à déplacer (pourlesquelles on dispose d'une information complète sur leurs attributs privés) et non dans le conteneur qui gère beaucoup d'objets, pas forcément des figures à déplacer, et qui n'a qu'une visibilité réduite des attributs de chacun...
Mais faire un JFrame implements MouseListener n'est pas vraiment judicieux, il vaut mieux faire des Listener dans la classe des figures à déplacer (pourlesquelles on dispose d'une information complète sur leurs attributs privés) et non dans le conteneur qui gère beaucoup d'objets, pas forcément des figures à déplacer, et qui n'a qu'une visibilité réduite des attributs de chacun...
Je débute complètement Java et j'aurais bien voulu comprendre ce code.
En fait il y a 2 choses que je n'ai pas très bien compris.
-le getX() et getY() à la ligne 67, elles sont héritée de "Component" suite à l'appel avec "super" ?
-Je n'ai pas non plus compris la ligne 49: public abstract void paint(Graphics g);
tu défini une methode vide? Et d'où sort l'objet "g"?
Désolé de ma curiosité, je me triture la tête à comprendre ce java :x
getX() et getY() sont effectivement hérités de Component et donc transmis à Moveable et Circle.
Cependant l'utilisation du super est indépendante, le super dans la classe Circle fait référence au constructeur de la classe Moveable, ça ne fait pas intervenir Component.
public abstract void paint(Graphics g); tu défini une methode vide?
Je définis une méthode vide, mais avec le mot clé abstract, en conséquence la classe Moveable est également abstract. Cela signifie qu'on ne pourra pas créer d'objets de type Moveable, on oblige donc à passer par une classe qui redéfinit explicitement le comportement de paint, comme le fait la classe Circle par exemple.
d'où sort l'objet "g"?
L'objet g est un paramètre de la méthode, il n'est pas utile de savoir d'où il vient, il faut juste savoir qu'au moment où la méthode paint est appelée (appelée par qui, peu importe également), alors cet objet nous est fourni ce qui nous permet de l'utiliser pour décrire notre composant.
Pour comprendre un peu mieux : lorsque tu créés une JFrame, celle ci créé un objet Graphics que l'on peut récupérer avec getGraphics, c'est (plus ou moins) cet objet qui est transmis à paint, à chaque fois que la JFrame se rafraîchit.