Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer une image après appui sur un bouton

    11 février 2012 à 19:00:02

    Bonjour,

    Alors, j'ai pas mal de connaissance dans le langage C, mais je ne parviens pas à comprendre le fonctionnement du Graphics de java.
    A partir de ce didacticiel : http://www.siteduzero.com/tutoriel-3-1 [...] onteneur.html
    Au titre "Objet Graphics"
    J'aimerai simplement faire la même chose mais suite à l'appui sur un bouton. (Je lance le main, un bouton apparait, j’appuie sur le bouton, le cercle apparait).

    C'est quelque chose qui doit être très banale mais j'ai passé plusieurs heures maintenant à faire bloquer mon programme, afficher une fenêtre vide, et des meilleurs...

    Je cherche donc une âme charitable pour me sortir de là.

    Pour rappel :

    import java.awt.Graphics;
    import javax.swing.JPanel;
     
    public class Panneau extends JPanel {
     
            public void paintComponent(Graphics g){
                  //Vous pourrez voir cette phrase à chaque fois que la méthode est invoquée !
                   System.out.println("Je suis exécutée ! ! !"); 
                   g.fillOval(20, 20, 75, 75);
            }               
    }
    


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class Fenetre extends JFrame implements ActionListener{
     
    	JButton fr = new JButton("ezqydfwh");
    	
            public Fenetre(){
                    
                    this.setTitle("Ma première fenêtre java");
                    this.setSize(100, 150);
                    this.setLocationRelativeTo(null);               
                    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    this.setContentPane(new Panneau());
                    
                    add(fr);
    
                    fr.addActionListener(this);
                    
                    this.setVisible(true);
            }
    
    
    		public void actionPerformed(ActionEvent e) {
    			/** Ici l'action à effectuer après appui sur le bouton**/
    		}
            
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      12 février 2012 à 12:48:32

      Hellow",
      As-tu déjà vu les layout ?
      • Partager sur Facebook
      • Partager sur Twitter
        12 février 2012 à 13:12:54

        en premier il te manque une méthode main() dans ta classe fenetre.

        Il faut ensuite que l'appui sur le bouton déclenche une action; ta méthode actionPerformed() est là pour ça. Il faut donc y ajouter une action qui modifiera l'affichage dans ton panel Panneau.

        Dans ce panel Panneau, tu surcharges la méthode d'affichage paintComponent(), il faut donc ajouter la méthode repaint() à la fin de ta méthode paintComponent(). Par contre le fait de surcharger ta méthode paintComponent() affichera en permanence ce cercle que tu veux dessiner indépendamment de l'appui sur le bouton. Il faut donc ajouter une condition dans ta méthode paintComponent() qui gérera l'affichage du cercle. Un boolean que tu mettra à true lors de l'appui sur le bouton fera l'affaire.

        public class Panneau extends JPanel {
        
        	private boolean withCircle = false;
        
        	public void paintComponent(Graphics g) {
        		Graphics2D g2d = (Graphics2D) g;
        		if (withCircle) {
        			g2d.fillOval(20, 20, 75, 75);
        		}
        		repaint();
        	}
        
        	public void setCircle(boolean bool) {
        		this.withCircle = bool;
        	}
        }
        


        public class Fenetre extends JFrame{
         
        	private JButton fr = new JButton("ezqydfwh");
        	private Panneau pan ;
        	
                public Fenetre(){
                        
                        this.setTitle("Ma première fenêtre java");
                        this.setSize(100, 150);
                        this.setLocationRelativeTo(null);               
                        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        pan = new Panneau();
                        this.setContentPane(pan);
                        
                        this.add(fr);
        
                        fr.addActionListener(new java.awt.event.ActionListener() {
            				public void actionPerformed(java.awt.event.ActionEvent e) {
            					pan.setCircle(true);
            				}
            			});
                        
                        this.setVisible(true);
            		}            
                
        		public static void main(String[] args){
        			new Fenetre();		
        		}    
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          12 février 2012 à 13:47:43

          de mon coté malgré un repaint() le rond ne s'affichait pas sans un pack() apres la methode d'ajout du panneaux ^^

          et si il en ai graphics2D je pense pas qu'il est vu les classes anonymes ^^' apres je me trompe peut etre
          • Partager sur Facebook
          • Partager sur Twitter
            12 février 2012 à 14:41:40

            J'ai dit une bêtise, il n'est pas logique de mettre repaint() dans paintComponent(), puisque repaint() appelle paintComponent(). Il vaut mieux que ton panneau appelle repaint() lors de l'appui sur le bouton.

            public class Panneau extends JPanel {
            	
            	private boolean withCircle = false;
            
            	public void paintComponent(Graphics g) {
            		super.paintComponent(g);
            		if (withCircle) {
            			g.fillOval(20, 20, 75, 75);
            		}
            	}
            
            	public void setCircle() {
            		this.withCircle = !withCircle;
            	}
            }
            

            public class Fenetre extends JFrame{
             
            	private JButton fr = new JButton("ezqydfwh");
            	private Panneau pan ;
            	
                    public Fenetre(){
                            
                            this.setTitle("Ma première fenêtre java");
                            this.setSize(100, 150);
                            this.setLocationRelativeTo(null);               
                            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                            pan = new Panneau();
                            this.setContentPane(pan);              
                            this.add(fr);
                            fr.addActionListener(new java.awt.event.ActionListener() {
                				public void actionPerformed(java.awt.event.ActionEvent e) {
                					pan.setCircle();
                					pan.repaint();
                				}
                			});
                            
                            this.setVisible(true);
                		}            
                    
            		public static void main(String[] args){
            			new Fenetre();		
            		}    
            }
            


            J'ai modifié le code de façon que l'appui sur le bouton affiche ou efface le cercle.
            • Partager sur Facebook
            • Partager sur Twitter

            Créer une image après appui sur un bouton

            × 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