Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation de boutons avec SWING java

Comment recuperer l'activation d'un bouton dans une autre classe ?

    20 décembre 2014 à 15:03:06

    Bonjour à tous,

    Je ne suis pas très habitué à poster sur des forums, excusez moi d'avance si le sujet n'est pas bien posé .

    Voilà je programme en java depuis 3 mois, j'ai besoin dans le cadre de mon IUT de créer une petite interface graphique pour un programme.

    N’étant pas très au point sur Swing, je ne sais pas trop comment m'y prendre, voilà mon problème :

    J'ai des choix proposés à l'utilisateur dans la console, j'aimerai passer à une interface graphique avec deux boutons oui/non.

    Or, comment récupérer l'activation de ces boutons dans ma classe applicative ?

    J'ai appris a effectuer des traitements pour les événements des boutons, à l’intérieur de la classe Frame, mais pas en dehors.

    Merci à vous.

    -
    Edité par Hugodu38 20 décembre 2014 à 15:06:28

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      20 décembre 2014 à 15:23:17

      Il faut que tu crée des listener.
      Par exemple, tu crée deux boutons dans ton interface, au quel tu ajoute deux actionListener.
      En fonction de l'activation, tu applique ce qu'il doivent traiter.

      Par exemple le bout de code dans le Frame donnerais ..

      Button b = new Button("coucou 1");
      b.addActionListener(new CoucouListener());

      et dans ton CoucouListener qui est un extends de ActionListener tu aurais quelque chose du genre dans la fonction ActionPerformed :

      public CoucouListener(){
       .. 
      }
      
      public ActionPerformed(arg0){
        Traite_ton_code .. 
      }
      • Partager sur Facebook
      • Partager sur Twitter
        20 décembre 2014 à 15:36:11

        Merci à toi pour ta réponse.

        Autre question : Si je veux pouvoir traiter dans ma classe applicative chaque bouton d'une interface, vais-je devoir créer autant de Listener que de boutons ?

        J'ai uniquement besoin de dire à ma classe applicative " le bouton a été pressé " , le traitement est sensé être suspendu tant que l'utilisateur n'a pas cliqué sur le bouton . Comment faire ?

        Parce qu'ici je vais quand même pas créer une méthode qui renvoie un boolean que je vais appeler dans ma classe applicative ?

        Pardon pour les questions idiotes, mais on a vu en cours que l'aspect visuel des IHM et pas leurs codes .

        -
        Edité par Hugodu38 20 décembre 2014 à 15:41:31

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          20 décembre 2014 à 16:28:04

          Pas obligatoirement.

          /* Supposons que t'es ceci dans ta Frame */
          Button bouton_on = new Button("On"); 
          bouton_on.addActionListener(new MonListener());
          Button bouton_off = new Button("Off");
          bouton_off.addActionListener(new MonListener());

          public monListener(){
           .. 
          }
          
          /* Arg0 est l'événement crée. GetActionCommand te dis 
          qui te l'as envoyer. */
          public void actionPerformed(ActionEvent arg0){
           if (arg0.getActionCommand().equals("On")){
              monBoolean = true; 
           else if (arg0.getActionCommand().equals("Off")){
              monBoolean = false; 
           } 
          }



          -
          Edité par Anonyme 20 décembre 2014 à 16:29:58

          • Partager sur Facebook
          • Partager sur Twitter
            20 décembre 2014 à 16:30:56

            Voilà mon code, dans ma classe Main:

                    public boolean demandeAchat(CarreauPropriete p){
                       // Creation de ma fenêtre dans laquelle se trouve un bouton valider
                       AchatPropriete fenetre= new AchatPropriete();
                       // Ici je set des choses à afficher dans ma fenetre
                       fenetre.setNom(p.getNomCarreau());
                       fenetre.setLocalisation(Integer.toString(p.getNumero()));
                       fenetre.setPrix(Integer.toString(p.getPrixAchat()));
                       fenetre.setVisible(true);
                       // Code provisoir en attendant l'IHM
                       System.out.println("Voulez-vous acheter la propriété suivante ?");
                       System.out.println("1-oui    0-non");
                       Scanner sc = new Scanner(System.in);
                       int choix= sc.nextInt();
                       
                       return choix==1;
                       
                    }

             Je veux remplacer le oui/non par le bouton Valider ou Annuler dans ma fenêtre.

            J'ai bien compris ta réponse avec le Listener, mais ensuite comment je passe ce boolean de Listener à ma classe applicative ?

            -
            Edité par Hugodu38 20 décembre 2014 à 16:35:30

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              20 décembre 2014 à 16:34:35

              Tous dépends ou tu test.
              Par exemple si tu test dans ton interface

              Tu passes en paramètre a la création de ton listener ton interface.
              Tu la récupère dans ton constructeur du listeneur.
              Et ensuite tu effectue tes appels ..

              -
              Edité par Anonyme 20 décembre 2014 à 16:37:01

              • Partager sur Facebook
              • Partager sur Twitter
                20 décembre 2014 à 16:47:14

                J'ai pas compris ta réponse.

                Je peux pas être plus clair que le code plus haut. J'ai juste besoin de remplacer une simple saisie clavier par une IHM et je sais pas comment faire.

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  20 décembre 2014 à 16:51:30

                  /* Je te donne un exemple en awt ( A peu prêt similaire . ) */ 
                  
                  public Interface extends Frame{
                     public Interface(){
                        // création fenêtre 
                        
                        Button b1 = new Button("b1"); 
                        Button b2 = new Button("b2"); 
                        b1.addActionListener(new MonListener(this)); 
                        b2.addActionListener(new MonListener(this)); 
                  
                  }
                  
                  public monListener extends ActionListener{
                    private Interface interf; 
                    public monListener(Interface I) {
                        this.interf = I; 
                     }
                  
                    public void actionPerformed(ActionEvent arg0){
                      if (arg0.getActionCommand.equals("b1"){
                          interf.setBackground(Color.blue); 
                      }
                      else if (arg0.getActionCommand.equals("b2"){
                          interf.setBackground(Color.red); 
                      }
                    }

                  Le code ci-dessus permet de changer la couleur de la fenêtre de l'interface par exemple ..
                  Le principe est le même pour ce que tu veux faire.
                  Donc pour ton problème, c'est le même principe, mise a part que b1 et b2 devienne oui non, et que ton interface devient ce que t'as besoin. A la place des interf.set tu met ta variable choix à 1 sur on, et a 0 sur off ..

                  -
                  Edité par Anonyme 20 décembre 2014 à 16:57:38

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 décembre 2014 à 16:56:06

                    Je code un jeu de Monopoly, tout se passe dans la console pour l'achat des propriétés.

                    J'ai une classe Monopoly qui gère le plateau avec les differentes cases . J'ai séparé les affichages du traitement dans deux packages.

                    C'est la classe Monopoly qui envoies des messages aux joueurs pour savoir si il veut acheter ou non la propriété.

                    C'est pourquoi ma fonction demandeAchat retourne un Boolean, si le joueur est d'accord, il achète la propriété.

                    Il n'y a aucune IHM actuellement dans mon programme, et j'aimerai une fenêtre avec un choix, a chaque fois que le joueur pourra acheter ou non une propriété.

                    -
                    Edité par Hugodu38 20 décembre 2014 à 16:56:39

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      20 décembre 2014 à 17:01:43

                      En supposant que t'as classe s'appel demandeAchat ..

                      Dans ta classe MonListener, tu crée une variable de ce type.
                      Et ensuite, dans ton actionperformed, en supposant que tu est crée des getter et des setter pour ton boolean, tu lui affecte vrai si c'est cliqué sur On, faux sinon.
                      Et voilà ..

                      Note : Ce qu'il te faut c'est pas une fenêtre, mais une boîte de dialogue qui viendra se superposé a ta fenêtre principal.

                      -
                      Edité par Anonyme 20 décembre 2014 à 17:02:21

                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 décembre 2014 à 17:10:14

                        C'est pas une classe c'est une methode.

                        Mais, c'est si compliqué que ça de remplacer une saisie oui/non en console par un simple bouton ?

                        On doit passer par une boite de dialogue + une fenêtre etc .. ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          20 décembre 2014 à 17:24:17

                          Je sais que c'est une méthode merci , c'est bien pour ça que je te dis en supposant qu'elle s'appelle comme ça ^^.
                          Bah si tu veux crée un mode fenêtre, il te faut bien une fenêtre de base pour ton jeu non ? La boîte de dialogue ça t'éviterais simplement de crée une nouvelle fenêtre. Après, c'est à toi de voir.
                          Mais dans le principe, il te faut une variable globale dans la classe que tu veux modifier, un setter et un getter.
                          Dans ton actionPerformed, tu crée une variable du type de ta classe, et fait appel a ton setter que tu as crée dans la classe pour le modifier.

                          public MaClasse{
                           private Boolean choix ; 
                           
                           public MaClasse (){
                             .. 
                           } 
                          
                           // Toutes tes fonctions 
                          
                           public void setChoix(Boolean b){
                              choix = b ; 
                           }
                          
                           public Boolean getChoix(){
                              return choix ; 
                           } 
                          
                          
                          //Et dans ton actionListener : 
                          
                          private MaClasse mc; 
                          public monListener(){
                           .. 
                          }
                          
                          public void actionPerformed(ActionEvent arg0) {
                             if (arg0.getActionCommand.equals("On"){
                                mc.setChoix(true); 
                             else if (arg0.getActionCommand.equals("Off"){
                                mc.setChoix(false); 
                             } 
                          
                          

                          -
                          Edité par Anonyme 20 décembre 2014 à 17:24:57

                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 décembre 2014 à 17:31:13

                            Je vais tester ça merci, désolé d'avoir prix de ton temps.

                            Merci pour tes réponses.

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              20 décembre 2014 à 17:34:50

                              Pas de soucis, je sais pas si j'ai bien été super clair, si t'as besoin redemande !
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Utilisation de boutons avec SWING java

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown