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 :

Ajout d'un ActionListener ou MouseListener sur un JComponent


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 140
    Par défaut Ajout d'un ActionListener ou MouseListener sur un JComponent
    Salut,

    Je possède en fait plusieurs JComponent. J'ai vu qu'il n'existait pas de méthode addActionListener. J'ai décidé alors de faire appel à la méthode addMouseListener() en y réimplémentant les méthodes nécessaires. Hors, en cliquant sur un de mes JComponent, je remarque qu'il ne va ni dans la méthode mouseClicked, ni dans mousePressed.

    J'ai même essayé en utilisant un mouseMotionAdapter mais rien n'y fait.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    tabComponents[i][j] = new AbaloneComponent(Color.decode("#F0DDFF"),30,30);
     
                           tabComponents[i][j].addMouseListener(new MouseListener() {
     
    			@Override
    				public void mouseReleased(MouseEvent arg0) {
    					// TODO Auto-generated method stub
     
    				}
     
    			@Override
    				public void mousePressed(MouseEvent arg0) {
    					System.out.println("mouse pressed");
    				}
     
    			@Override
    			        public void mouseExited(MouseEvent arg0) {
    					// TODO Auto-generated method stub		
    				}
     
    				@Override
    				public void mouseEntered(MouseEvent arg0) {
    					// TODO Auto-generated method stub
     
    				}
     
    				@Override
    				public void mouseClicked(MouseEvent arg0) {
    					System.out.println("clicked");
    				}
    			});
    merci

  2. #2
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Quel est ton composant AbaloneComponent?
    Tu ne supprimes pas le listener plus loin dans le code par hasard?
    Factorise tes Listener pour n'en utiliser qu'un seul (ça dépend des gout après).

    Peux tu fournir un échantillon exécutable du problème merci.
    ps : plus de code

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 140
    Par défaut
    voici le code de la classe AbaloneComponent :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    public class AbaloneComponent extends JComponent{
    	private Color color;
    	private int width,height;
     
    	public AbaloneComponent(Color color,int width,int height) {
    		super();
    		this.color = color;
    		this.width = width;
    		this.height = height;
    	}
     
    	public Color getColor() {
    		return color;
    	}
     
    	public void setWidth(int width){
    		this.width = width;
    	}
     
    	public void setHeight(int height){
    		this.height = height;
    	}
     
    	public int getWidth(){
    		return width;
    	}
     
    	public int getHeight(){
    		return height;
    	}
     
    	public void setColor(Color color){
    		this.color = color;
    	}
     
    	public void paintComponent(Graphics g) {
    		Graphics2D g2 = (Graphics2D) g;
     
    		g2.setColor(Color.decode("#FF7856"));
    		g2.fillRect(0, 0, width*2 + 50, height*2 + 50);
     
    		g2.setColor(color);
    		g2.fillOval(0,0, width, height);
     
    	}
    }

  4. #4
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Pour information JComponent possède déjà des attributs width & height. Ainsi que 2 attributs couleurs (foreground & background).
    Il est définie comme un rectangle et on peux le modifier en appelant setBounds(Rectangle r) ou setBounds(int x,int y, int width, int height)MouseListener récupère la position X & Y et la souris et la compare avec le rectangle du composant.

    Dans ton cas, tu ne change jamais la position de ton composant, tu utilises tes PROPRES attributs width et height. Le MouseListener n'est pas sensé le savoir.
    La bonne méthode à adopter :
    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 class AbaloneComponent extends JComponent{
     
    	public AbaloneComponent(Color color,int x, int y,int width,int height) {
    		super();
    		super.setBackground(color);
                    super.setBounds(x, y, width, height);               
    	}
     
    	public void paintComponent(Graphics g) {
    		Graphics2D g2 = (Graphics2D) g;
     
    		g2.setColor(Color.decode("#FF7856"));
    		g2.fillRect(0, 0, getWidth()*2 + 50, getHeight()*2 + 50);
     
    		g2.setColor(super.getBackground());
    		g2.fillOval(0,0, getWidth(), getHeight());
    	}
    }

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 140
    Par défaut
    en fait, je voudrais que quand on clique sur un JComponent, il y ait une bordure noire qui se mette autour du composant

  6. #6
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Comme dis précédemment, JComponent possède déjà une panoplie de fonction.
    Regarde la javadoc
    Dans ton cas il s'agit de la méthode : setBorder(Border border)

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 140
    Par défaut
    je sais mais n'existe-t-il pas des listeners pour les JComponent qui écoute les click de souris ?

  8. #8
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    je sais mais n'existe-t-il pas des listeners pour les JComponent qui écoute les click de souris ?
    Bâ le MouseListener . Excatement comme tu l'as fait dans le premier post : addMouseListener(...)Ensuite dans la méthode de ton choix (mousePressed, mouseClicked, ...) tu place le code que tu souhaite.

    Dans ton cas il suffira d'appeler setBorder(...) sur le composant courant. Il faudra aussi supprimer la bordure du dernier JComponent sélectionné. Pour cela, il suffit de sauvegarder le dernier composant sélectionné en faisant un attribut de classe par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private JComponent componentSelected;
    //...
    public void mousePressed(MouseEvent arg0) {
    	componentSelected.setBorder(null);
    	componentSelected = nouveauComposant;
    	componentSelected.setBorder(...);
    }

Discussions similaires

  1. MouseListener sur une JTable
    Par ythim dans le forum Composants
    Réponses: 3
    Dernier message: 21/04/2006, 14h40
  2. mouseListener sur une partie d'une fenetre ?
    Par apesle dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 18/04/2006, 13h19
  3. [MouseListener] sur plusieurs composants... GlassPane ?
    Par lilou77 dans le forum Composants
    Réponses: 7
    Dernier message: 05/12/2005, 10h13
  4. Réponses: 2
    Dernier message: 15/06/2005, 23h56
  5. MouseListener sur Shape !
    Par zigg dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 25/10/2004, 21h03

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