Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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 :
    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 :
    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 :
    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 Expert
    Homme Profil pro Mathieu
    Ingénieur développement logiciels
    Inscrit en
    avril 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathieu
    Localisation : France

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

    Informations forums :
    Inscription : avril 2004
    Messages : 1 181
    Points : 1 674
    Points
    1 674

    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
    Invité de passage
    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 : 0
    Points
    0

    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 Dinobogan Shelashyn
    ingénieur
    Inscrit en
    juin 2007
    Messages
    3 661
    Détails du profil
    Informations personnelles :
    Nom : Homme Dinobogan Shelashyn
    Âge : 33
    Localisation : France

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

    Informations forums :
    Inscription : juin 2007
    Messages : 3 661
    Points : 5 532
    Points
    5 532

    Par défaut

    Pourrais-tu détailler les limitations que tu as rencontré ?
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Invité de passage
    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 : 0
    Points
    0

    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
    Modérateur
    Avatar de sinok
    Profil pro
    Inscrit en
    août 2004
    Messages
    8 757
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : août 2004
    Messages : 8 757
    Points : 11 828
    Points
    11 828

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •