|
Dernière réponse | |
---|---|
Sujet : [JAVA] Gerer les evenements (souris) sur son propre composant | |
radeontof | 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: |
Aperçu |
---|
Vue Rapide de la discussion |
---|
radeontof | 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: |
darklord22 |
|
radeontof | 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: |
darklord22 | c'est quoi l'erreur de compilation? |
radeontof | 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)... |
darklord22 |
|
radeontof | 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] |
darklord22 |
|
El_gringo | ç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. |
radeontof | 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! |