Mouse event
Fermé
Ano1994
Messages postés
31
Date d'inscription
jeudi 15 août 2013
Statut
Membre
Dernière intervention
3 avril 2015
-
22 nov. 2013 à 23:47
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 - 26 nov. 2013 à 10:37
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 - 26 nov. 2013 à 10:37
A voir également:
- Mouse event
- Sport event 365 avis ✓ - Forum Consommation et internet
- Auto mouse click - Télécharger - Divers Utilitaires
- Mouse mover - Télécharger - Utilitaires
- Mouse and keyboard recorder - Télécharger - Divers Utilitaires
- Automatic mouse and keyboard - Télécharger - Divers Utilitaires
2 réponses
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
Modifié par KX le 23/11/2013 à 14:21
Modifié par KX le 23/11/2013 à 14:21
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
Ano1994
Messages postés
31
Date d'inscription
jeudi 15 août 2013
Statut
Membre
Dernière intervention
3 avril 2015
25 nov. 2013 à 00:45
25 nov. 2013 à 00:45
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
}
}
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
25 nov. 2013 à 08:06
25 nov. 2013 à 08:06
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...
25 nov. 2013 à 16:56
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
25 nov. 2013 à 19:31
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.
26 nov. 2013 à 10:37