IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

MouseListener particulier


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 23
    Points : 13
    Points
    13
    Par défaut MouseListener particulier
    Bonjour à tous,
    voici l'implémentation d'un objet IDrawable que se "dessine" dans ma fenêtre principale ( ca donne un carré rouge ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.awt.geom.Ellipse2D;
     
    import Listeners.DrawabListener;
     
    public interface IDrawable {
     
     
    	public  void draw(Graphics g);
     
    	public Rectangle getRectangle();
     
    	public void setToolTipText(String string);
     
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public abstract class FormDrawable   implements IDrawable {
     
    	protected Rectangle rect;
    	protected Color color;
     
    	public FormDrawable(Color color, Point pos, Dimension dim){
    		this.color=color;
    		this.rect = new Rectangle(pos,dim);
    	}
     
    	public abstract void draw(Graphics g);
     
    	public Rectangle getRectangle(){
    		return (Rectangle) rect.clone();
    	}
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class RectangleDrawable extends FormDrawable{
     
    	public RectangleDrawable(Color color, Point pos, Dimension dim) {
    		super(color, pos, dim);
     
    	}
     
    	public void draw(Graphics g) {
    		Color c = g.getColor();
    		g.setColor(color);
    		g.fillRect(rect.x,rect.y,rect.height,rect.width);
    		g.setColor(c);
    	}
     
     
     
    }
    et voici comment je les instancie dans mon main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Dimension dim  =new Dimension(8,8);
        	IDrawable Marsa = new RectangleDrawable(Color.RED,new Point(930,70),dim);
    Je voudrais interagir avec cet objet par clic de souris. Comment coder un MouseListener pour cet objet très particulier ? ( l'interface MouseListener marche trivialement pour les boutons, panneaux etc... mais ,paraît-il, pas pour mon objet) Merciiii

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Si tes rectangles ne sont pas des Components mais juste des formes que tu dessines sur ton Panel, il faudra que tu le gères toi même.

    Ex :
    - Ajouter un MouseListener au panel
    - Pour chaque évènement, tester si l'évènement à lieu sur le carré rouge (Avec coordonnées & dimensions)
    - Si oui, transmettre l'évènement au listeners du carré rouge

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    C'est bien la méthode que j'emploie pour le moment , mais ça me pose quelques limitations. Est_il possible de faire de mon objet IDrawable une extension de JComponent. Si oui comment ? ( sachant que j'ai tout bêtement ajouté un extends JComponent à la classe FormDrawable mais que ca n'a pas marché )

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Pourrais-tu détailler les limitations que tu as rencontré ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Mon objectif est en fait d'interagir "directement" à l'aide de la souris avec mes objets IDrawable . Ce que je fais actuellement et qui marche bien mais qui nécessite une très grosse syntaxe, c'est récupérer les coordonnées de l'endroit où j'ai cliqué et puis intéragir avec le panel ( et non pas mes points) dans une zone autour de ces coordonnées.
    Les limitations que je rencontre c'est l'impossibilité d'ajouter un addMouseListener à mes objets (erreur de compilation) et quand je rajoute un extends JComponent, l'erreur de compilation disparaît mais l'exécution n'est pas bonne ...

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Je te conseille de lire ma réponse sur ton sujet concernant les infobulles.

    Mêmes symptômes, même réponse (méthode contains & cie).

    Principalement, la récupération du point sous la sourie n'est pas franchement dur, tester

    Puis tu fais en sorte que ce soit tes IDrawable qui fassent la majeur partie du travail.

    Par exemple qu'il fournisse une liste d'actions qui seront récupérées par le panneau principal pour les ajouter à un JPopupMenu.

    Qu'ils fournissent le contenu des Tooltips (voir même les dessine si tu veux tu tooltip un poil fancy). De plus, que feras tu quand tu auras des formes non rectangulaires (le JComponent était un rectangle sans rémission possible)?

    C'est la façon propre de faire.
    Ton bidouillage à grand coup de JComponent ne marchera pas, tes IDrawable n'ayant pas d'existence physique au sens Swing, n'ayant jamais été rajoutés dans une hiérarchie).
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

Discussions similaires

  1. [JFrame] [MouseListener] recupérer evenement souris
    Par kikoufr dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 19/08/2004, 18h45
  2. [MouseListener] Confusion de listener
    Par i.took.the.red.pill dans le forum Agents de placement/Fenêtres
    Réponses: 14
    Dernier message: 18/06/2004, 14h42
  3. Réponses: 2
    Dernier message: 05/01/2004, 11h23
  4. Select particulier .
    Par hamed dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/11/2003, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo