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

avec Java Discussion :

Lier une méthode à un bouton


Sujet :

avec Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut Lier une méthode à un bouton
    bonjour,
    J'ai trois class dont une me pose problème :
    La 1 (exécution quelconque) et la 2 (interface graphique avec un bouton).
    le problème, c'est dans la 3 que dois je mettre pour appeler ma méthode lorsque je clique mon bouton ???
    j'ai tenté une multitudes de solutions...mais jamais la bonne !
    Merci de votre aide,

    1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Votre premiere application en Java
    class FirstApp {
       public static void main (String[] args){
       	System.out.println("Hello World");
       }
    }
    2:
    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
    import javax.swing.*;
     
    public class testbouton {
    	public static void main(String[] args) {
    	// Crée un panneau
    	JPanel contenuFenêtre = new JPanel();
    	// Crée les contrôles en mémoire
    	JButton lancer = new JButton("Exécuter");
    	// Ajoute les contrôles au panneau
    	contenuFenêtre.add(lancer);
    	// Crée le cadre et y ajoute le panneau
    	JFrame cadre = new JFrame("Mon premier bouton !");
    	cadre.setContentPane(contenuFenêtre);
    	// Positionne les dimensions et rend la fenêtre visible
    	cadre.setSize(400,100);
    	cadre.setVisible(true);
    	MoteurTestBouton moteurTestBouton = new MoteurTestBouton();
    	lancer.addActionListener(moteurTestBouton);
    	}
    }
    3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
    public class MoteurTestBouton implements ActionListener {
    	public void actionPerformed(ActionEvent événement) {
    		// ici??
    	}
    }

  2. #2
    Membre expérimenté Avatar de Seb19
    Homme Profil pro
    Concepteur SOA
    Inscrit en
    Septembre 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur SOA

    Informations forums :
    Inscription : Septembre 2005
    Messages : 217
    Par défaut


    Dans ta classe 3 tu peux mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String[] args = new String[1];
    FirstApp.main(args);
    C'est pas beau comme code, mais ça marche.
    Pour faire plus propre, il faudrait mettre ton "Hello Word" dans une méthode séparée du main() que tu appeleras alors dans ta classe MoteurTestBouton.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut
    La modification pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
    public class MoteurTestBouton implements ActionListener {
    	public void actionPerformed(ActionEvent événement) {
    		// On peut laisser ici une méthode vide, même s'il
    		// ne se produira rien quand Java l'appellera
    		String[] args = new String[1];
    		Apportsiecl.main(args);
    		}
    }
    provoque un plantage avec :
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    Cela est (peut-être) dû au "Unhandled exception type IOException"
    mais l'ajout de throws IOException n'est (a priori) pas possible.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut
    avec FirstApp tel que je l'ai présenté cela fonctionne...

    Le problème c'est que mon code contient throws IOException :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class FirstApp {
       public static void main (String[] args) throws IOException{
       	System.out.println("Hello World");
       }
    }
    Savez vous comment on gère ce cas?

    PS : évidemment, tout cela, ce n'est pas pour afficher HelloWord! mais cela allège la demande et permet de rester lisible.

    Merci à vous

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Par défaut
    Salut,

    Je ne comprend pas vraiment ta question puisque tu as 2 'main'!

    Comme ca, ca devrait marcher!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class FirstApp {
       public static void main (String[] args){
       	new TestBouton();   // Noms de classe en majuscule! merci
       }
    }
    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
    import javax.swing.*;
     
    public class TestBouton extends JFrame
    {
        // Constructeur
    	public TestBouton() {
    		setSize(400,100);
                    setTitle("Mon premier bouton !");
    		getContentPane().setLayout(new FlowLayout());
     
    		lancer = new JButton("Exécuter");
    		getContentPane().add(lancer);
    		setVisible(true);
     
    		MoteurTestBouton moteurTestBouton = new MoteurTestBouton(lancer);
    		lancer.addActionListener(moteurTestBouton);
    	}
           private JButton lancer
    }
    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
    import java.awt.event.*;
     
    public class MoteurTestBouton implements ActionListener {
            // Constructeur dans lequel on récupère le bouton
            // Bien utile pour pouvoir traiter un événement
    	MoteurTestBouton(JButton lancer)
    	{
    		this.lancer = lancer 
    	}
     
    	public void actionPerformed(ActionEvent événement) {
    		// ici??
    	}
     
    	private JButton lancer;
    }
    Voila

  6. #6
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    entoure le corps de ta méthode main par un block try/catch.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class FirstApp {
    	public static void main (String[] args) /* throws IOException */{
    		try {
    			System.out.println("Hello World");
    		} catch (IOException ioe) {
    			// Fait ta gestion d'erreurs ici
    		}
    	}
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut
    @Ikey : "Je ne comprend pas vraiment ta question puisque tu as 2 'main'!" ?
    J'ai regardé ton code et suis ouvert à toute proposition pour aboutir au code le plus simple possible mais je ne vois pas où tu mets le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("Hello World");
    Grimly : j'ai appliqué ta méthode et cela fonctionne. merci

    Mon problème est donc résolu mais si un code plus "pur" existe...

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Par défaut
    Citation Envoyé par shibo Voir le message
    @Ikey : "Je ne comprend pas vraiment ta question puisque tu as 2 'main'!" ?
    J'ai regardé ton code et suis ouvert à toute proposition pour aboutir au code le plus simple possible mais je ne vois pas où tu mets le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("Hello World");
    Tu souhaites faire quoi au juste? afficher le "Hello World" au clic du bouton?

    Danc de cas tu reprends mon code et tu ajoutes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void actionPerformed(ActionEvent événement) {
    		if(événement.getSource() == lancer)
                    {
                          System.out.println("Hello World");
                    }
    	}
    Ca au moins c'est beau à regarder (je parle de l'ensemble du code pas du résultat)! Enfin encore mieux ca serait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void actionPerformed(ActionEvent événement) {
    		if(événement.getSource() == lancer)
                    {
                          JOptionPane.showMessageDialog(null, "Hello World");
                    }
    	}
    Il faudra que tu importes les bonnes librairies et que tu rajoutes un ou deux ';' je les ai zappé!

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut
    @Ikey : J'ai pas de message d'erreur mais pas d'affichage non plus !
    Cela vient peut être de l'emplacement de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	private JButton lancer;
    ?

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Par défaut
    Citation Envoyé par shibo Voir le message
    @Ikey : "Je ne comprend pas vraiment ta question puisque tu as 2 'main'!" ?
    Je viens de réaliser que je n'avais pas répondu à ton interrogation.

    Quand tu utilises une telle méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static void main (String[] args){
     
       }
    ca signifie que c'est le coeur de l'application. Tout part de là. Il ne peut pas y en avoir 2 dans un même programme, hormis si tu souhaites utilises des méthodes merdiques, comme mettre un try/catch autour d'un println() ce qui est de la pure débilité.

    Enfin après c'est toi qui choisis: beau code facile à maintenir ou code merdique difficile à mettre en application dans un premier temps et encore plus si tu veux faire des modification. Je ne te raconte pas le couplage qu'impique une telle manière de travailler.


  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Par défaut
    Je te donne les sources qui marchent!

    Pour la déclaration des variables que ce soit au début ou à la fin, c'est comme tu veux. Perso je fais comme dans les librairies java. Mais ca ne change rien.
    Fichiers attachés Fichiers attachés

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut
    @Ikey pour ton code.

    Et pour les deux main, j'ai compris le principe ce soir, je tenterai de l'appliquer demain.


  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Par défaut
    Il existe 2 autres "bonnes" méthodes

    Je ne reprends pas le 'main'.
    Le reste n'est que dans un seul fichier.

    Méthode 1 (plus adaptée à un débutant et à ton problème, mais limitée à quelques composants)
    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
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class TestBouton extends JFrame implements ActionListener
    {
    	private JButton lancer;
     
    	public TestBouton()
    	{
    		setSize(400, 100);
    		setTitle("Mon premier bouton !");
    		getContentPane().setLayout(new FlowLayout());
     
    		lancer = new JButton("Exécuter");
    		getContentPane().add(lancer);
    		setVisible(true);
     
    		lancer.addActionListener(this);
    	}
     
    	public void actionPerformed(ActionEvent événement)
    	{
    		if (événement.getSource() == lancer)
    		{
    			JOptionPane.showMessageDialog(null, "Hello World");
    		}
    	}
    }

    Méthode 2
    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
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class TestBouton extends JFrame
    {
    	private JButton lancer;
     
    	public TestBouton()
    	{
    		setSize(400, 100);
    		setTitle("Mon premier bouton !");
    		getContentPane().setLayout(new FlowLayout());
     
    		lancer = new JButton("Exécuter");
    		getContentPane().add(lancer);
    		setVisible(true);
     
    		MoteurTestBouton moteurTestBouton = new MoteurTestBouton();
    		lancer.addActionListener(moteurTestBouton);
    	}
     
    	class MoteurTestBouton implements ActionListener
    	{
    		public void actionPerformed(ActionEvent événement)
    		{
    			if (événement.getSource() == lancer)
    			{
    				JOptionPane.showMessageDialog(null, "Hello World");
    			}
    		}
    	}
    }
    Dès que les projets deviennent plus gros il faudra t'orienter vers le MVC

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

Discussions similaires

  1. [Débutant] Pb GridView : lier une méthode de Sorting(OnSorting) dans le code behind
    Par tikjdaoui dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 23/10/2012, 18h02
  2. Comment lier une sélection à un bouton
    Par Giloux dans le forum QlikView
    Réponses: 2
    Dernier message: 30/08/2011, 15h58
  3. Réponses: 8
    Dernier message: 30/08/2010, 16h02
  4. Est il possible de lier une macro à un bouton ?
    Par rimbaut dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/08/2007, 08h17
  5. Lier une méthode d'un composant à une rubrique d'aide
    Par avigeilpro dans le forum Delphi
    Réponses: 3
    Dernier message: 09/03/2007, 19h59

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