Faire interagir un bouton en Java
Résolu
Photoshoper
Messages postés
90
Date d'inscription
Statut
Membre
Dernière intervention
-
Photoshoper Messages postés 90 Date d'inscription Statut Membre Dernière intervention -
Photoshoper Messages postés 90 Date d'inscription Statut Membre Dernière intervention -
Salut tout le monde j’espère que vous allez bien?
J’étais en train de m'exercer en Java quand j'ai rencontre ce petit problème.
Voilà j'ai voulus mettre une action sur mon JButton bouton, après des recherche j'ai vue que cela est possible avec l'objet MouseListener. J'ai tenté tans que mal à le faire mais cela ne marche toujours pas voici le code de ma classe j’espère que vous apporterais une solution à mon problème en me montrant la bonne syntaxe.
J’étais en train de m'exercer en Java quand j'ai rencontre ce petit problème.
Voilà j'ai voulus mettre une action sur mon JButton bouton, après des recherche j'ai vue que cela est possible avec l'objet MouseListener. J'ai tenté tans que mal à le faire mais cela ne marche toujours pas voici le code de ma classe j’espère que vous apporterais une solution à mon problème en me montrant la bonne syntaxe.
import java.awt.BorderLayout; import java.awt.event.MouseWheelListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Fenetre extends JFrame implements MouseWheelListener{ private JPanel pan = new JPanel(); private JButton bouton = new JButton("Mon bouton"); public Fenetre(){ this.setTitle("Animation"); this.setSize(300, 150); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); //On définit le layout à utiliser sur le content pane this.setLayout(new BorderLayout()); //Ajout du bouton à notre content pane //pan.add(bouton); this.getContentPane().add(bouton, BorderLayout.EAST); this.setVisible(true); bouton.addMouseListener(bouton); } }
A voir également:
- Action bouton java
- Action - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Télécharger film d'action gratuitement et rapidement - Télécharger - TV & Vidéo
- Eclipse java - Télécharger - Langages
4 réponses
Bonjour,
Voici la correction :
Et :
Voici la correction :
import java.awt.BorderLayout; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Fenetre extends JFrame implements MouseListener { private JPanel pan = new JPanel(); private JButton bouton = new JButton("Mon bouton"); public Fenetre() { this.setTitle("Animation"); this.setSize(300, 150); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); //On définit le layout à utiliser sur le content pane this.setLayout(new BorderLayout()); //Ajout du bouton à notre content pane //pan.add(bouton); this.getContentPane().add(bouton, BorderLayout.EAST); this.setVisible(true); bouton.addMouseListener(this); } public void mouseClicked(MouseEvent e) { System.out.println("Parfait :-)"); } public void mousePressed(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} }
Et :
import javax.swing.JFrame; public class Principal { public static void main(String arguments[]) { JFrame fenetre = new Fenetre(); } }
Mais de rien.
Si tu utilises plusieurs boutons dans ce cas tu dois jouer avec l'objet « e » MouseEvent pour déterminer de quel bouton il s'agit…
Si tu utilises plusieurs boutons dans ce cas tu dois jouer avec l'objet « e » MouseEvent pour déterminer de quel bouton il s'agit…
Bonjour,
J'aimerais quand même rajouter un point (tant qu'on y est...)
La fenêtre est là pour générer un ensemble d’événements et le listener pour traiter un événement en particulier.
Mais une classe qui est à la fois fenêtre et gestionnaire d'événements c'est incorrect d'un point de vue conception objet, d'autant plus que les événements ici ne concernent que le bouton, pas la fenêtre en elle même.
Exemple de correction avec des classes anonymes :
NB. On n'a plus besoin de regarder e.getSource() car on ajoute le listener directement au bouton qui doit le récupérer et non plus à la fenêtre.
Remarque : on peut aussi le faire avec des classes internes.
Et depuis Java 8 on peut utiliser une lambda expression :
Ou une référence de méthode :
J'aimerais quand même rajouter un point (tant qu'on y est...)
extends JFrame implements MouseWheelListenerest maladroit car ça fait une classe qui fait tout et n'importe quoi, sans séparation des rôles.
addMouseListener(this);c'est un peu comme un pompier pyromane qui serait à la fois celui qui allume le feu et celui qui va l'éteindre...
La fenêtre est là pour générer un ensemble d’événements et le listener pour traiter un événement en particulier.
Mais une classe qui est à la fois fenêtre et gestionnaire d'événements c'est incorrect d'un point de vue conception objet, d'autant plus que les événements ici ne concernent que le bouton, pas la fenêtre en elle même.
Exemple de correction avec des classes anonymes :
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Fenetre extends JFrame { private static final long serialVersionUID = 1L; private final JButton bouton; public Fenetre() { setTitle("Animation"); setSize(300, 150); setDefaultCloseOperation(EXIT_ON_CLOSE); setLocationRelativeTo(null); setLayout(new BorderLayout()); bouton = new JButton("Mon bouton"); /* bouton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { System.out.println("MouseAdapter : " + e); } }); */ bouton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("ActionListener : " + e); } }); add(bouton, BorderLayout.EAST); setVisible(true); } }
NB. On n'a plus besoin de regarder e.getSource() car on ajoute le listener directement au bouton qui doit le récupérer et non plus à la fenêtre.
Remarque : on peut aussi le faire avec des classes internes.
bouton = new JButton("Mon bouton"); bouton.addActionListener(new BoutonActionListener()); add(bouton, BorderLayout.EAST); setVisible(true); } private final class BoutonActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { System.out.println("ActionListener : " + e); } } }
Et depuis Java 8 on peut utiliser une lambda expression :
bouton = new JButton("Mon bouton"); bouton.addActionListener(e -> System.out.println("ActionListener : " + e)); add(bouton, BorderLayout.EAST); setVisible(true); } }
Ou une référence de méthode :
bouton = new JButton("Mon bouton"); bouton.addActionListener(this::boutonActionListener); add(bouton, BorderLayout.EAST); setVisible(true); } private void boutonActionListener(ActionEvent e) { System.out.println("ActionListener : " + e); } }
merci beaucoup
ça serai différent n'est s'pas?