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

Composants Java Discussion :

Un bouton (extends AbstractButton) fait maison n'est pas écouté


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut Un bouton (extends AbstractButton) fait maison n'est pas écouté
    Bonjour,

    J'essaie de fabriquer des boutons. Pour mon premier bouton fait maison j'ai fait une sorte d'étoile en créant une classe MyComponent qui étend AbstractButton (en fait j'ai regardé le code source de JButton pour hériter et implémenter les mêmes classes -> voir ici).
    Donc j'arrive à ajouter un ActionListener sur ce composant mais lorsque je clique dessus, je n'obtiens pas d'action (j'ai simplement mis une sortie en console).

    Voici le code que j'ai créé :
    classe Ctrl dans package main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package main;
     
    import frame.MyFrame;
     
    public class Ctrl {
     
    	public static void main(String[] args) {
    		MyFrame frame = new MyFrame("fenetre");
    		frame.setVisible(true);
    	}
    }
    classe MyFrame dans package frame :
    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
    package frame;
     
    import java.awt.HeadlessException;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.BoundedRangeModel;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JSlider;
     
    import component.MyComponent;
     
    public class MyFrame extends JFrame implements ActionListener{
     
    	MyComponent comp;
     
    	public MyFrame(String title) throws HeadlessException {
    		super(title);
     
    		buildFrame();
    		comp = new MyComponent();
    		comp.addActionListener(this);
    		add(comp);
    	}
     
    	private void buildFrame() {
    		setSize(1000, 600);
    		setLocationRelativeTo(null);	//On centre la fenêtre sur l'écran
    		setResizable(false);	//On interdit la redimensionnement de la fenêtre
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//On dit Ã* l'application de se fermer lors du clic sur la croix
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		System.out.println("actoion");
    		if(e.getSource() == comp){
    			System.out.println("cool");
    		}
    	}
    }
    et la classe MyComponent dans le package component :
    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
    package component;
     
    import java.awt.Color;
    import java.awt.Graphics;
     
    import javax.accessibility.Accessible;
    import javax.swing.AbstractButton;
    import javax.swing.BoundedRangeModel;
    import javax.swing.DefaultBoundedRangeModel;
    import javax.swing.JComponent;
    import javax.swing.SwingConstants;
     
    public class MyComponent extends AbstractButton implements Accessible{
     
    	private static final long serialVersionUID = -6924489132160787713L;
     
     
    	protected BoundedRangeModel sliderModel;
    	public MyComponent() {
     
    	}
    	public MyComponent(int min, int max, int value) {
    		super();
            sliderModel = new DefaultBoundedRangeModel(value, 0, min, max);
     
    	}
     
    	@Override
        public void paintComponent(Graphics g){
    		super.paintComponent(g);
    		g.setColor(Color.RED);
    		int[] xPoints = {30, 40, 60, 40, 40, 30, 20, 20, 0, 20};
    		int[] yPoints = {0, 20, 20, 30, 50, 40, 50, 30, 20, 20};
    		g.fillPolygon(xPoints, yPoints, 10);
    	}
    }
    Voilà, si quelqu'un peut m'aider à comprendre ... merci
    OS : LinuxMint 20

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    AbstractButton est une classe qui n'implémente pas tout. Pourquoi tu n'étends pas JButton si tu veux un bouton custom? Au premier regard, la première erreur que je vois c'est que tu n'associé pas de modèle au bouton, donc AbstractButton ignore si le bouton est clickable.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour,

    Qu'est-ce qu'un modèle s'il vous plaît ?

    Pourriez-vous m'indiquer une page web où la question du modèle et de l'association au bouton est traitée ?

    Sinon je vais essayer en héritant de JButton.

    Merci,
    OS : LinuxMint 20

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    C'est vrai que cela fonctionne bien mieux en étendant d'un JButton !

    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
    package component;
     
    import java.awt.Color;
    import java.awt.Graphics;
     
    import javax.accessibility.Accessible;
    import javax.swing.AbstractButton;
    import javax.swing.BoundedRangeModel;
    import javax.swing.DefaultBoundedRangeModel;
    import javax.swing.DefaultButtonModel;
    import javax.swing.JButton;
    import javax.swing.JComponent;
    import javax.swing.SwingConstants;
     
    public class MyComponent extends JButton implements Accessible{
     
    	private static final long serialVersionUID = -6924489132160787713L;
     
    	public MyComponent() {
     
    	}
    	public MyComponent(int min, int max, int value) {
    		super();
    	}
     
    	@Override
        public void paintComponent(Graphics g){
    		super.paintComponent(g);
    		g.setColor(Color.RED);
    		int[] xPoints = {30, 40, 60, 40, 40, 30, 20, 20, 0, 20};
    		int[] yPoints = {0, 20, 20, 30, 50, 40, 50, 30, 20, 20};
    		g.fillPolygon(xPoints, yPoints, 10);
    	}
    }
    OS : LinuxMint 20

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par francky74 Voir le message
    Bonjour,

    Qu'est-ce qu'un modèle s'il vous plaît ?

    Merci,
    Les modèles sont utilisé dans la plupart des composant spring pour stocker la valeur du composant. Pour un JTextField, ça contient du texte, pour un bouton ça contient sont état (enfoncé / verrouilé / désactivé ...)

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Merci

    D'accord, cela peut-être intéressant d'expérimenter cette voie

    Je vais tenter le coup !
    OS : LinuxMint 20

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/04/2015, 18h22
  2. Réponses: 1
    Dernier message: 20/04/2011, 17h03
  3. desactivé bouton fermer tant que tt n'est pas saisi
    Par mat75019 dans le forum Access
    Réponses: 7
    Dernier message: 11/04/2006, 20h34
  4. package fait maison
    Par kij dans le forum Modules
    Réponses: 6
    Dernier message: 20/04/2005, 16h57
  5. Réponses: 4
    Dernier message: 15/12/2003, 17h46

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