Partage
  • Partager sur Facebook
  • Partager sur Twitter

Evénement qui se produit deux fois par clic au lieu d'une

Sujet résolu
    18 juin 2009 à 11:08:54

    Bonjour,

    Dans le code suivant, a chaque fois que je clique sur un bouton, ça déclenche deux événements. Comment l'empécher?

    public class Principale 
    {
    	public static void main(String[] args) 
    	{
    		Fenetre fenetre_act = new Fenetre();
    	}
    
    }
    

    import javax.swing.JFrame;
    
    public class Fenetre extends JFrame
    {
    	public Fenetre()
    	{
    		this.setTitle("Compilateur");
    		this.setSize(800,600);
    		
    		this.setContentPane(new Interface());
    		
    		this.setVisible(true);
    	}
    }
    

    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JPanel;
    
    public class Interface extends JPanel implements ActionListener
    {
    	int compteur = 0;
    	
    	JButton btn_compiler = new JButton("Compiler");
    	JButton btn_ouvrir = new JButton("Ouvrir");
    	JButton btn_quitter = new JButton("Quitter");
    	JButton btn_aide = new JButton("Aide");
    	
    	public void paintComponent(Graphics g)
    	{
    		btn_compiler.addActionListener(this);
    		btn_ouvrir.addActionListener(this);
    		btn_quitter.addActionListener(this);
    		btn_aide.addActionListener(this);
    		
    		this.add(btn_compiler);
    		this.add(btn_ouvrir);
    		this.add(btn_quitter);
    		this.add(btn_aide);
    	}
    
    	public void actionPerformed(ActionEvent arg0) 
    	{
    		if(arg0.getSource() == btn_compiler)
    		{
                this.compteur ++;
                System.out.println(compteur);
    		}
    	}
    }
    


    Merci beaucoup

    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2009 à 13:25:51

      Salut,
      Je sais pas si c'est ça mais j'ai déjà remarqué que, au démarage de java, la fonction "paint component" est appelée deux fois ce qui fait que l'ajout du listener est exécuté deux fois. Cela pourrait expliquer pourquoi le listener réagit deux fois lors d'un événement. Le plus simple est d'ajouter les liseners à tes boutons ailleurs que dans la fonction "paint component"
      • Partager sur Facebook
      • Partager sur Twitter
        18 juin 2009 à 13:47:25

        Ohla j'avais pas vu. Pourquoi tu mets tout dans paintComponent? Tout ce qui se trouve dans paintComponent devrait aller dans le constructeur de ton JPanel. Aie aie aie
        • Partager sur Facebook
        • Partager sur Twitter
          18 juin 2009 à 14:17:56

          Bah oui, tu as deux actionListener sur un même bouton donc l'action s'exécute deux fois, et il vaut mieux que tu fasse ta GUI dans une méthode appelée par le constructeur initailise par exemple, et non dans la méthode paintComponent. (Qui est appelée plusieurs fois.)

          Donc en gros,il y a du boulot au niveau de la structure de tout code.
          • Partager sur Facebook
          • Partager sur Twitter
            18 juin 2009 à 14:44:25

            Merci beaucoup pour vos içnfos. Grâce à vous, mon problème est résolu. Merci
            • Partager sur Facebook
            • Partager sur Twitter

            Evénement qui se produit deux fois par clic au lieu d'une

            × 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