Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1265 connectés 

  FORUM HardWare.fr
  Programmation

  [JAVA] Gerer les evenements (souris) sur son propre composant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Gerer les evenements (souris) sur son propre composant

n°89359
radeontof
Posté le 15-01-2002 à 11:36:34  profilanswer
 

Salut,
 
(cette applet est juste un p'tit exercice pour m'entrainer au JAVA)
 
Mon applet s'appelle Menu et incorpore plusieurs composants Lien que j'ai créé.
 
Je veux que chaque Lien change de texte au passage de la souris.
Ca parait simple et ca marche si je définis les evenements dans mon applet . Par ex : lien1_mousemove....
 
Mais vu que chaque lien réagira pareil je veux définir l'événement dans Lien et non dans l'applet.
 
Mais la ca ne marche pas, g essayé plusieurs tentatives sans succés.
J'ai l'impression qu'il ne prend pas en compte les evenements de mes Liens.
Voici mes sources :
 
Pour lien :
 
public class Lien extends Component{
 
String afftexte;
String texte;
String texte2;
Color couleur;
 
public Lien(){
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
 
public Dimension getPreferredSize() {
return new Dimension(30, 30);
}
 
public Lien(String stexte,String stexte2,Color c){
texte=stexte;
texte2=stexte2;
afftexte=texte;
couleur=c;
}
 
public void update(Graphics g){
paint(g);
}
 
public void paint(Graphics g){
g.setColor(couleur) ;
g.drawString(afftexte,0,10) ;
super.paint(g);
}
private void jbInit() throws Exception {
}
//gestion de MOUSEMOVE QUI NE FONCTIONNE PAS
 
public boolean mouseMove(Event e,int x,int y)
{  
afftexte=texte2;
repaint();
return true;
}
}
 
 
----------------
Voici Menu:
 
 
public class Menu extends JApplet implements Runnable {
 
boolean isStandalone = false;
Thread lanceur;
Graphics ecran,ong;
Image temp;
 
 
Lien lien2 = new Lien("Gnou","GNOU2",new Color(0,255,0));
Lien lien1 = new Lien("salut","Bonjour",new Color(255,0,0));
XYLayout xYLayout1 = new XYLayout();
 
 
public void run(){
while (true)
{
repaint();
try {Thread.sleep(50);}
catch (InterruptedException e) {showStatus("Error " + e);}
}
}
 
//Construire l'applet
public Menu() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
 
}
 
//Initialiser l'applet
public void init() {
try {
this.getContentPane().add(lien1,new XYConstraints(1,1,-1,-1));
this.getContentPane().add(lien2,new XYConstraints(10,10,-1,-1));
}
catch(Exception e) {
e.printStackTrace();
}
}
 
private void jbInit() throws Exception {
this.getContentPane().setLayout(xYLayout1);
}
 
 
//Démarrer l'applet
public void start() {
if (lanceur == null); {
lanceur = new Thread(this);
lanceur.start();
}
}
 
//Arrêter l'applet
public void stop() {
if (lanceur !=null){
lanceur.stop();
lanceur = null;
}
}
}
 
 
Si quelqu'un a une idée...
 
Merci d'avance!


---------------

mood
Publicité
Posté le 15-01-2002 à 11:36:34  profilanswer
 

n°89374
El_gringo
Posté le 15-01-2002 à 11:52:17  profilanswer
 

ça fait longtemps que g pas touché au Java, mais je crois qu'il faut que t'ajoutes ton objet au message handler de souris.

n°89380
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 15-01-2002 à 11:56:39  profilanswer
 

radeontof a écrit a écrit :

Salut,
 
(cette applet est juste un p'tit exercice pour m'entrainer au JAVA)
 
Mon applet s'appelle Menu et incorpore plusieurs composants Lien que j'ai créé.
 
Je veux que chaque Lien change de texte au passage de la souris.
Ca parait simple et ca marche si je définis les evenements dans mon applet . Par ex : lien1_mousemove....
 
Mais vu que chaque lien réagira pareil je veux définir l'événement dans Lien et non dans l'applet.
 
Mais la ca ne marche pas, g essayé plusieurs tentatives sans succés.
J'ai l'impression qu'il ne prend pas en compte les evenements de mes Liens.
Voici mes sources :
 
Pour lien :
 
public class Lien extends Component{
 
String afftexte;
String texte;
String texte2;
Color couleur;
 
public Lien(){
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
 
public Dimension getPreferredSize() {
return new Dimension(30, 30);
}
 
public Lien(String stexte,String stexte2,Color c){
texte=stexte;
texte2=stexte2;
afftexte=texte;
couleur=c;
}
 
public void update(Graphics g){
paint(g);
}
 
public void paint(Graphics g){
g.setColor(couleur) ;
g.drawString(afftexte,0,10) ;
super.paint(g);
}
private void jbInit() throws Exception {
}
//gestion de MOUSEMOVE QUI NE FONCTIONNE PAS
 
public boolean mouseMove(Event e,int x,int y)
{  
afftexte=texte2;
repaint();
return true;
}
}
 
 
----------------
Voici Menu:
 
 
public class Menu extends JApplet implements Runnable {
 
boolean isStandalone = false;
Thread lanceur;
Graphics ecran,ong;
Image temp;
 
 
Lien lien2 = new Lien("Gnou","GNOU2",new Color(0,255,0));
Lien lien1 = new Lien("salut","Bonjour",new Color(255,0,0));
XYLayout xYLayout1 = new XYLayout();
 
 
public void run(){
while (true)
{
repaint();
try {Thread.sleep(50);}
catch (InterruptedException e) {showStatus("Error " + e);}
}
}
 
//Construire l'applet
public Menu() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
 
}
 
//Initialiser l'applet
public void init() {
try {
this.getContentPane().add(lien1,new XYConstraints(1,1,-1,-1));
this.getContentPane().add(lien2,new XYConstraints(10,10,-1,-1));
}
catch(Exception e) {
e.printStackTrace();
}
}
 
private void jbInit() throws Exception {
this.getContentPane().setLayout(xYLayout1);
}
 
 
//Démarrer l'applet
public void start() {
if (lanceur == null); {
lanceur = new Thread(this);
lanceur.start();
}
}
 
//Arrêter l'applet
public void stop() {
if (lanceur !=null){
lanceur.stop();
lanceur = null;
}
}
}
 
 
Si quelqu'un a une idée...
 
Merci d'avance!  




 
Lorsque tu as un MouseEvent qui est génére tu entres dans la méthode MouseEvent machin chose (je me souviens plus du nom). Une fois dans cette méthode tu peux récupérer la source, i.e. l'objet qui a généré l'event (ici c'est un composant). Donc en récupérant l'objet source, tu peux savoir quel composant est lié à l'évenement et changer l'aspect de ton applet.
 
N'oublie pas d'ajouter chaque composant au listener avant ...
 
A+


---------------
What is popular is not always right, what is right is not always popular :D
n°89385
radeontof
Posté le 15-01-2002 à 12:05:03  profilanswer
 

C ce que j'ai fait dans Lien j'ai ajouté ceci à l'initialisation:
 
this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
 
      public void mouseMoved(MouseEvent e) {
        this_mouseMoved(e);
      }
    });
 
Puis ceci:
 void this_mouseMoved(MouseEvent e) {
      afftexte=texte2;
      repaint();
  }
 
Mais toujours rien.

 

[edtdd]--Message édité par radeontof--[/edtdd]


---------------

n°89410
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 15-01-2002 à 13:15:05  profilanswer
 

radeontof a écrit a écrit :

C ce que j'ai fait dans Lien j'ai ajouté ceci à l'initialisation:
 
this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
 
      public void mouseMoved(MouseEvent e) {
        this_mouseMoved(e);
      }
    });
 
Puis ceci:
 void this_mouseMoved(MouseEvent e) {
      afftexte=texte2;
      repaint();
  }
 
Mais toujours rien.  
 




 
C'est normal tu ajoutes ton listener à ton Applet. Je ne suis pas persuadé que c'est ce composant qui va générer des MouseEvent. Il y a tout un tas de composants visuels au dessus (content pane et compagnie) ... donc regarde peut etre la doc pour savoir ou tu dois la placer.
 
Sinon tu fais un system.out dans ta méthode de callback pour savoir si l'éveneemnt est génére ou pas ...
 
Est-ce clair?


---------------
What is popular is not always right, what is right is not always popular :D
n°89663
radeontof
Posté le 15-01-2002 à 19:05:56  profilanswer
 

Ok c bon.
G ajouté ceci dans MouseMove de l'applet:
Component comp=this.getContentPane().getComponentAt(e.getPoint());
if (comp.getClass()==lien1.getClass()){
    Lien complien=(Lien)comp;
....
 
Par contre, je n'arrive pas à ajouter un composant dans un composant? est-ce possible?
 
Exemple: Polylien : dessine un polygone et incorpore Lien qui est un lien internet.
 
Mais dans PolyLien Jbuilder ne veut pas faire de add(Lien)...


---------------

n°89667
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 15-01-2002 à 19:14:03  profilanswer
 

c'est quoi l'erreur de compilation?


---------------
What is popular is not always right, what is right is not always popular :D
n°89690
radeontof
Posté le 15-01-2002 à 20:45:10  profilanswer
 

C bon: en fait Component ne gere pas l'ajout d'autres Components.
Par contre Container (qui dérive de Component) le gere.
Ca fonctionne maintenant.
 
Reste que je voudrais bien savoir si la souris est sur Lien qui se trouve dans Polylien qui se trouve dans l'applet.
 
Je n'arrive pas à associer les evenements de la souris à mon composant Polylien pour savoir si Lien est sous la souris.
 
Je sais c pas tres clair... :crazy:  
 
Merci de ton aide (encore une fois)  :jap:


---------------

n°89697
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 15-01-2002 à 21:00:08  profilanswer
 

radeontof a écrit a écrit :

Je sais c pas tres clair... :crazy:  
 
Merci de ton aide (encore une fois)  :jap:  




 
désolé je comprends pas. Je relirai demain à tête reposée


---------------
What is popular is not always right, what is right is not always popular :D
n°89713
radeontof
Posté le 15-01-2002 à 21:26:03  profilanswer
 

J'ai trouvé :
Dans mes Composants:
 
   enableEvents(AWTEvent.MOUSE_EVENT_MASK);
   enableEvents(AWTEvent.MOUSE_MOTION_EVENT_MASK);
 
Puis je définis ceci:
public void processMouseEvent(MouseEvent e){
        switch(e.getID()) {
        case MouseEvent.MOUSE_EXITED:
 
....
               }
        break;....
}
 
Pas besoin de tester le composant par rapport à l'applet.
Celui-ci réagit tout seul maintenant. :bounce:


---------------


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [JAVA] Gerer les evenements (souris) sur son propre composant

 

Sujets relatifs
[java ,linux] comment gérer un truc comme ça ?[java] je cherche des exemples d'interfaces
[JAVA] Création d'une classe Border avec Swing[JAVA] Créer et appeler un Paquetage?
[JAVA] Question sur Swing[Java] Newbie : applet marche dans JBuilder mais pas dans IE...
[JAVA] les images dans une appli ?[JAVA] HttpURLConnection
[java] lire une webcam? 
Plus de sujets relatifs à : [JAVA] Gerer les evenements (souris) sur son propre composant


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR