Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème embêtant

Curiosité...

Sujet résolu
    16 février 2009 à 18:38:50

    Salut, avant de faire le TP calculatrice, j'ai voulu tester mes connaissances sans regarder du tout le tuto, j'ai donc fait ce code :

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.*;
    import javax.swing.*;
    
    public class Fenetre extends JFrame {
    	
    	
    	private static int i = 0;
    	public boolean autorisation = true;
    	
    	private JButton bouton_play = new JButton("Play");
    	private JButton bouton_stop = new JButton("Stop");
    	private JPanel container = new JPanel();
    	private JLabel mon_texte = new JLabel(" " + i);
    	
    	public Fenetre()  {
    		
    	this.setTitle("Ma fenetre");
    	this.setSize(400,400);
    	this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    	this.setLocationRelativeTo(null);
    	
    	JPanel south = new JPanel();
        south.add(bouton_play);
        south.add(bouton_stop);
        
        //Définition d'une police d'écriture
        Font police = new Font("Comic Sans MS", Font.BOLD, 12 );
        //On applique celle-ci aux JLabel
        mon_texte.setFont(police);
        //On change la couleur de police
        mon_texte.setForeground(Color.black);
        //Et on change l'alignement du texte grâce aux attributs static de la classe JLabel
        mon_texte.setHorizontalAlignment(JLabel.CENTER);
    	
    	    container.setBackground(Color.gray);
    	    container.setLayout(new BorderLayout());
    	    
    	    container.add(south, BorderLayout.SOUTH);
    	    container.add(mon_texte, BorderLayout.NORTH);
        
    	    bouton_play.addActionListener(new BoutonPlayListener());
            bouton_stop.addActionListener(new BoutonStopListener());
    	
    	
    	
    	this.setContentPane(container);
    	this.setVisible(true);
    	
    	go();
    	
    	}
    	
    	private void go() {
    		
    		if(autorisation = true) {
    			mon_texte.setText(" "+i);
    			i+=1;
    			
    			
    		} else if(autorisation = false) {
    			mon_texte.setText(" "+i);
    			
    		}
    		
    	}
    
    	
    
    	class BoutonPlayListener implements ActionListener{
    
    	       
            public void actionPerformed(ActionEvent e) {
            	
            	bouton_play.setEnabled(false);
                bouton_stop.setEnabled(true);
            	autorisation = true;
                   
            }
    }
    	
    	class BoutonStopListener implements ActionListener{
    
    	       
            public void actionPerformed(ActionEvent e) {
            	
            	bouton_stop.setEnabled(false);
            	bouton_play.setEnabled(true);
            	autorisation = false;
            	
         
            
          }    
    	}
    }
    


    Mais outch, il ne marche pas, j'ai essayé 30 000 trucs mais rien n'y fait, pouvez vous m'éclairer à ce sujet ? merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      16 février 2009 à 18:58:35

      Attention l'opérateur d'égalité n'est pas "=" mais "==" !!!
      "=" est l'opérateur d'affectation.

      De plus, pas besoin de tester si un boolean est égale à true ou false :
      Et le "else if" n'est lui aussi pas indispensable, au contraire :
      if(autorisation) {
      	mon_texte.setText(" "+i);
      	i+=1;	
      } else {
      	mon_texte.setText(" "+i);
      }
      


      bonne suite :)
      • Partager sur Facebook
      • Partager sur Twitter
        16 février 2009 à 19:12:32

        Tout d'abord merci pour ton aide mais ça ne m'avance pas vraiment.
        Où dois-je mettre deux "=" et où un seul ?

        Quand j'en met deux partout, ça foire, on m'indique une erreur, quand j'en met 1 seul partout et deux au if else ça change rien, ça n'indique pas d'erreur mais le programme ne fonctionne pas.

        Ce code me permet de conclure que le bouton play ne marche pas correctement :

        import java.awt.*;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        import java.util.*;
        import javax.swing.*;
        
        public class Fenetre extends JFrame {
        	
        	
        	private static int i = 0;
        	public boolean autorisation = true;
        	
        	private JButton bouton_play = new JButton("Play");
        	private JButton bouton_stop = new JButton("Stop");
        	private JPanel container = new JPanel();
        	private JLabel mon_texte = new JLabel(" " + i);
        	
        	public Fenetre()  {
        		
        	this.setTitle("Ma fenetre");
        	this.setSize(400,400);
        	this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        	this.setLocationRelativeTo(null);
        	
        	JPanel south = new JPanel();
            south.add(bouton_play);
            south.add(bouton_stop);
            
            //Définition d'une police d'écriture
            Font police = new Font("Comic Sans MS", Font.BOLD, 12 );
            //On applique celle-ci aux JLabel
            mon_texte.setFont(police);
            //On change la couleur de police
            mon_texte.setForeground(Color.black);
            //Et on change l'alignement du texte grâce aux attributs static de la classe JLabel
            mon_texte.setHorizontalAlignment(JLabel.CENTER);
        	
        	    container.setBackground(Color.gray);
        	    container.setLayout(new BorderLayout());
        	    
        	    container.add(south, BorderLayout.SOUTH);
        	    container.add(mon_texte, BorderLayout.NORTH);
            
        	    bouton_play.addActionListener(new BoutonPlayListener());
                bouton_stop.addActionListener(new BoutonStopListener());
        	
        	
        	
        	this.setContentPane(container);
        	this.setVisible(true);
        	
        	go();
        	
        	}
        	
        	private void go() {
        		
        		if(autorisation==true) {
        			do {
        			mon_texte.setText(" "+i);
        			i+=1;
        			}while(autorisation==true);
        			
        		} else {
        			mon_texte.setText(" "+i);
        			
        		}
        		
        	}
        
        	
        
        	class BoutonPlayListener implements ActionListener{
        
        	       
                public void actionPerformed(ActionEvent e) {
                	
                	bouton_play.setEnabled(false);
                    bouton_stop.setEnabled(true);
                	autorisation = true;
                       
                }
        }
        	
        	class BoutonStopListener implements ActionListener{
        
        	       
                public void actionPerformed(ActionEvent e) {
                	
                	bouton_stop.setEnabled(false);
                	bouton_play.setEnabled(true);
                	autorisation = false;
                	
             
                
              }    
        	}
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          16 février 2009 à 19:29:37

          Hehe c'est un soucis de Thread. Si tu veux une explication meilleure que serait la mienne, va voir dans le tuto. C'est expliqué pourquoi ça ne repart pas quand tu recliques sur Play ;)
          • Partager sur Facebook
          • Partager sur Twitter
            16 février 2009 à 19:42:26

            Dans le tuto il est bien gentil il nous lache thread par là thread par ci mais il nous dit pas ce que c'est qu'un thread.
            Putain ça commence à me pomper l'air je fais que relire cette partie je pige toujours pas.
            • Partager sur Facebook
            • Partager sur Twitter
              16 février 2009 à 19:45:56

              tu dois mettre 2 '=' uniquement si tu veux que ça devienne un boolean

              int x =3;
              int y=4;
              System.out.println("Pour bien comprende  la différence ");
              System.out.println("double égale renvois : " + x==y );
              System.out.println("simple égale renvois "+x=y);
              if(x==y){
              System.out.println("n'est pas lut");
              }
              if(x==y-1){System.out.println("est lut");}
              
              • Partager sur Facebook
              • Partager sur Twitter
                16 février 2009 à 19:47:27

                Oui c'est vrai c'est lâché un peu vite mais le "problème" quand on débute avec Swing, c'est qu'il vaut mieux savoir ce qu'est un thread, étant donné que Swing utilise un thread bien à lui pour dessiner ses composants, et par ailleurs que leur utilisation n'est pas "thread-safe".

                Y'a un moment (ça doit être dans le chapitre intéraction boutons je pense) où il compare les threads à des Piles. Et c'est exactement comme ça que ça marche.

                Et puis y'a un moment où faut arrêter de lire les tutos, de chercher soi-même, de poser des questions sur le forum qu'en dernier recours. C'est beaucoup plus instructif.
                Perso je passe au moins 3 heures sur un problème -plus une nuit de sommeil si nécessaire, plus encore 2 heures si j'ai eu une nouvelle idée la nuit- au minimum avant de poser une question sur le forum. Résultat : ben j'ai appris un truc. Pis en cherchant bien tout seul, on trouve toujours.

                Bien sûr c'est pas une règle du forum, mais en se l'imposant à soi, ben on apprend.
                Et puis programmer de toute manière, c'est se casser la tête ;) Y'a pas de génie né dans ce domaine.
                • Partager sur Facebook
                • Partager sur Twitter
                  16 février 2009 à 20:07:58

                  Tout à fait d'accord, mais quand on apprend un nouveau langage ce n'est pas toujours facile (meme si j'ai fais de l'actionScript 3.0 pendant à peu près 10 mois (pure POO)).
                  Essayes de me comprendre :( Sinon, j'aimerai bien savoir comment créer une threade ? :p
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 février 2009 à 20:10:35

                    Y'a une partie du tuto consacrée à ça ^^'
                    On va pas refaire un tuto sur le forum à chaque fois, essaye de nous comprendre.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 février 2009 à 20:11:29

                      Ok ok j'te lâche la grappe... Même si ça m'aurait plu que quelqu'un me dise où placer ce putain de go :-°
                      Bonne soirée.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 février 2009 à 21:29:17

                        déjà c'est pas "go" c'est "start"
                        :p
                        ensuite on t'as dis que il y avait quelqu'un qui a fait un tuto dessus :o

                        http://www.siteduzero.com/tutoriel-3-1 [...] -threads.html

                        voilà lit relire rerelire :o

                        dis toi juste que un thread permet de faire des calcules en parrallele :o

                        jusqu'a présent, tu es limité par le faite que ton programme est toujours lut dans le même ordre :o
                        hors toi tu aimerais que ton programme fasse 2 choses en même temps :o
                        tu dois donc t'arranger pour que le processeur calcul 2 choses en même temps (il ne saura jamais le faire hein mais c'est presque tout comme)

                        c'est ça un thread :o un thread c'est un flux de calcule ...
                        si tu as 2 flux tu peux faire 2 choses en même temps 3 flux 3 choses en même temp ext ext ext
                        pour le reste je crois que les exemples suffisent :o
                        peut être que taper thread dans wikipédia :o vus que ce n'est pas quelque chose propre au langage java
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Problème embêtant

                        × 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