Faire interagir un bouton en Java
Résolu/Fermé
Photoshoper
Messages postés
90
Date d'inscription
jeudi 11 décembre 2014
Statut
Membre
Dernière intervention
2 mai 2019
-
30 avril 2017 à 00:46
Photoshoper Messages postés 90 Date d'inscription jeudi 11 décembre 2014 Statut Membre Dernière intervention 2 mai 2019 - 2 mai 2017 à 01:49
Photoshoper Messages postés 90 Date d'inscription jeudi 11 décembre 2014 Statut Membre Dernière intervention 2 mai 2019 - 2 mai 2017 à 01:49
A voir également:
- Action bouton java
- Action - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Tubidy film d'action telecharger - Télécharger - TV & Vidéo
- Action fans - Accueil - Guide arnaque
4 réponses
Felice_
Messages postés
265
Date d'inscription
mardi 25 avril 2017
Statut
Membre
Dernière intervention
20 juillet 2017
11
Modifié le 30 avril 2017 à 01:49
Modifié le 30 avril 2017 à 01:49
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(); } }
Felice_
Messages postés
265
Date d'inscription
mardi 25 avril 2017
Statut
Membre
Dernière intervention
20 juillet 2017
11
30 avril 2017 à 09:29
30 avril 2017 à 09:29
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…
tarek_dotzero
Messages postés
817
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
12 avril 2022
121
1 mai 2017 à 02:09
1 mai 2017 à 02:09
Plus précisément :
On peut utiliser == car on est sûre qu'il s'agit "exactement" du même objet (même adresse).
public void mouseClicked(MouseEvent e) { JButton source = (JButton)e.getSource(); if(source == bouton1){ // }else if(source == bouton2){ // } }
On peut utiliser == car on est sûre qu'il s'agit "exactement" du même objet (même adresse).
Photoshoper
Messages postés
90
Date d'inscription
jeudi 11 décembre 2014
Statut
Membre
Dernière intervention
2 mai 2019
6
>
tarek_dotzero
Messages postés
817
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
12 avril 2022
1 mai 2017 à 21:33
1 mai 2017 à 21:33
merci beaucoup j'ai fais à peux prêt la même choses
ta syntaxe semble être plus propre, je crois bien que je vais l'utiliser
ta syntaxe semble être plus propre, je crois bien que je vais l'utiliser
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
1 mai 2017 à 12:41
1 mai 2017 à 12:41
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); } }
Photoshoper
Messages postés
90
Date d'inscription
jeudi 11 décembre 2014
Statut
Membre
Dernière intervention
2 mai 2019
6
2 mai 2017 à 01:49
2 mai 2017 à 01:49
Merci KX,
ça n'a pas été facile mais j'ai finis par comprendre ton code.
Je dois reconnaître qu'il est plus ordonné et plus clair, j'aimerais bien programmer de la sorte.
ça n'a pas été facile mais j'ai finis par comprendre ton code.
Je dois reconnaître qu'il est plus ordonné et plus clair, j'aimerais bien programmer de la sorte.
tarek_dotzero
Messages postés
817
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
12 avril 2022
121
1 mai 2017 à 02:10
1 mai 2017 à 02:10
Bonjour,
Je veux ajouter une seule chaose : dans le cas des boutons, on préfère, généralement, l'utilisation de ActionListener qui a une seule méthode actionPerformed() et non pas 5 comme MouseListener.
Mais, puisque ça marche alors passez à autre chose.
Bon Courage.
Je veux ajouter une seule chaose : dans le cas des boutons, on préfère, généralement, l'utilisation de ActionListener qui a une seule méthode actionPerformed() et non pas 5 comme MouseListener.
Mais, puisque ça marche alors passez à autre chose.
Bon Courage.
Photoshoper
Messages postés
90
Date d'inscription
jeudi 11 décembre 2014
Statut
Membre
Dernière intervention
2 mai 2019
6
2 mai 2017 à 01:29
2 mai 2017 à 01:29
Bonsoir, tarek_dotzero
Dans le cas ou on utiliserai actionPerformed()
les autres syntaxe ne changeront pas?
Dans le cas ou on utiliserai actionPerformed()
les autres syntaxe ne changeront pas?
30 avril 2017 à 02:16
merci beaucoup
30 avril 2017 à 02:37
ça serai différent n'est s'pas?