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

 Java Discussion :

Intégrer une BufferedImage à plusieurs classes


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut Intégrer une BufferedImage à plusieurs classes
    Bonjour,

    Dans le cadre d'un projet pour la spécialité ISN en terminale, je me suis lancé dans la programmation d'un jeu avec une interface graphique.
    J'ai créée une BufferedImage dans une de mes class, sur laquelle j'ai dessiné plusieurs formes/lignes etc..
    J'aimerais savoir si il est possible (et si oui comment) de récupérer cette même BufferedImage avec les dessins qui sont associés dans une autre class.
    Cela va peut-être vous paraître obscur, c'est pourquoi je poste mon code:
    class n°1: (Définition de la Jframe dans laquelle j'intègre 5 boutons avec des ActionListener ainsi que la BufferedImage contenue dans la class n°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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener; 
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JButton;
     
    @SuppressWarnings("serial")
    public class Fenetre extends JFrame {
     
    	public Fenetre(){
    		this.setTitle("Colonisation");
    	    this.setSize(706, 750);
    	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    this.setLocationRelativeTo(null);
    	    this.setResizable(false);
     
    	    JButton bleu = new BB("Bleu");
    	    JButton vert = new BV("Vert");
    	    JButton orange = new BO("Orange");
    	    JButton rouge = new BR("Rouge");
    	    JButton jaune = new BJ("Jaune");
    	    JPanel content = new JPanel(new BorderLayout());
    	    JPanel contentSouth = new JPanel();
    	    Cases cases = new Cases();
     
    	    bleu.addActionListener(new ListenerBleu());
    	    vert.addActionListener(new ListenerVert());
    	    orange.addActionListener(new ListenerOrange());
    	    rouge.addActionListener(new ListenerRouge());
    	    jaune.addActionListener(new ListenerJaune());
     
    	    contentSouth.add(rouge);
    	    contentSouth.add(bleu);
    	    contentSouth.add(vert);
    	    contentSouth.add(jaune);
    	    contentSouth.add(orange);
    	    content.add(contentSouth,BorderLayout.SOUTH);
    	    content.add(cases,BorderLayout.CENTER);
     
     
    	    this.add(content);
    	    this.setVisible(true);
      }
    	class ListenerBleu extends JFrame implements ActionListener {
     
    		public void actionPerformed(ActionEvent arg0) {
    			ListenerBleuC LB = new ListenerBleuC();
    		}
    	}
     
    	class ListenerVert extends JFrame implements ActionListener {
     
    		public void actionPerformed(ActionEvent arg0) {
    			ListenerVertC LV = new ListenerVertC();
    		}
    	}
     
    	class ListenerOrange extends JFrame implements ActionListener {
     
    		public void actionPerformed(ActionEvent arg0) {
    			ListenerOrangeC LO = new ListenerOrangeC();
    		}
    	}
     
    	class ListenerJaune extends JFrame implements ActionListener {
     
    		public void actionPerformed(ActionEvent arg0) {
    			ListenerJauneC LJ = new ListenerJauneC();
    		}
    	}
     
    	class ListenerRouge extends JFrame implements ActionListener {
     
    		public void actionPerformed(ActionEvent arg0) {
    			ListenerRougeC LR = new ListenerRougeC();
    		}
    	}
     
    }
    class n°2: (Création de la BufferedImage + dessins)
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    import javax.swing.*;
    import java.io.*;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.util.Random;
     
     
     
    @SuppressWarnings("serial")
     
    public class Cases extends JPanel {
     
    	final BufferedImage image = 
                new BufferedImage(706, 750, BufferedImage.TYPE_INT_RGB);
    			Graphics g = (Graphics)image.getGraphics();
     
    		  int x1=0,y1=0,x4=1,y4=1,x5=1;
     
    		  int xp1=5,xp2=5,xg1=xp1-25,xg2=xp2,xd1=xp1+25,xd2=xp2,xh1=xp1,xh2=xp2+25,xb1=xp1,xb2=xp2-25;
    		  int xp[]={xp1,xp2};
    		  int xg[]={xg1,xg2};
    		  int xd[]={xd1,xd2};
    		  int xh[]={xh1,xh2};
    		  int xb[]={xb1,xb2};
     
     
     
    	public Cases() {
    			  g.setColor(Color.BLACK);
    			  while (x1<=706) {
    			  g.drawLine(x1, 0, x1, 600);
    			  x1+=25;
    			  }
    			  while (y1<=600) {
    			  g.drawLine(0, y1, 707, y1);
    			  y1+=25;
    			  }
    			  while (x5<=706) {
    			  paintAleat(g, x4, y4, 23, 23);
    			  x4+=25;
    			  x5+=25;
    			  }
     
    			/*    Color cpp= new Color(image.getRGB(xp1, xp2));
    				 int pr=cpp.getRed();
    			     int pg=cpp.getGreen();
    			     int pb=cpp.getBlue();
    				 int cpp1 = new Color(pr,pg,pb).getRGB();
     
     
    				 Color cpd = new Color(image.getRGB(xd1, xd2));
    				 int pr1=cpd.getRed();
    			     int pg1=cpd.getGreen();
    			     int pb1=cpd.getBlue();
    				 int cpd1 = new Color(pr1,pg1,pb1).getRGB();
     
    				 Color cpg = new Color(image.getRGB(xd1, xd2));
    				 int pr2=cpg.getRed();
    			     int pg2=cpg.getGreen();
    			     int pb2=cpg.getBlue();
    				 int cpg1 = new Color(pr2,pg2,pb2).getRGB();
     
     
    				if (cpp1==cpd1) {
    					g.setColor(new Color(pr,pg,pb));
    					g.drawRect(0, 0, 24, 49);
    					g.fillRect(0, 0, 24, 49);
    				}       */
     
    }
    	public void paintComponent(Graphics g) {
            g.drawImage(image, 0, 0, null);
    }
     
     
     
    	public static void paintAleat(Graphics g, int x2, int y2, int x3, int y3) {
    		while (y2<600) {
    			Random r = new Random();
    			int valeurMin = 1, valeurMax = 6;
    			int nr = valeurMin + r.nextInt(valeurMax - valeurMin);
    			if (nr==1) {
    				g.setColor(Color.blue);
    			}
    			if (nr==2) {
    				g.setColor(Color.red);
    			}
    			if (nr==3) {
    				g.setColor(Color.yellow);
    			}
    			if (nr==4) {
    				g.setColor(Color.green);
    			}
    			if (nr==5) {
    				g.setColor(new Color( 213, 128, 0));
    			}
    	    	g.drawRect(x2, y2, x3, y3);
    	    	g.fillRect(x2, y2, x3, y3);
    	    	y2+=25;
    		}
        }	
    }
    class n°3: (class appellée par l'actionListener d'un des boutons)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import javax.swing.*;
    import java.io.*;
    import java.awt.*;
     
    public class ListenerBleuC extends JPanel{
    	public ListenerBleuC() {
    		System.out.println("HelloB");
    		}
    }
    Dans mon exemple, j'aimerais faire appel à la BufferedImage de la class n°2 dans la class n°3.

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Soit tu donnes accès à la référence de ton image dans la classe Cases, on ajoutant une méthode (qu'on appelle accesseur (ou getter)) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Cases {
     
        /**...**/
       public BufferedImage getImage() {
           return image;
       }
     
    }
    Puis tu ajoutes un paramètre au constructeur de la classe qui doit pouvoir l'utiliser pour pouvoir lui transmettre, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class ListenerBleuC extends JPanel{
            private final BufferedImage image;
    	public ListenerBleuC(BufferedImage image) {
                this.image=image;
    		}
     
           protected void paintComponent(Graphics g) {
                    g.drawImage(image,0,0,null);
           }
    }
    et pour le code principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Cases cases = new Cases();
     
    ListenerBleuC listenerBleuC = new ListenerBleuC(cases.getImage());
    Comme ton image est probablement unique, on pourrait procéder aussi en la rendant statique et publique :

    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
    public class Cases extends JPanel {
     
    	public static final BufferedImage IMAGE = createImage();
     
            private static BufferedImage createImage() {
     
                BufferedImage image = new BufferedImage(706, 750, BufferedImage.TYPE_INT_RGB);
    			Graphics g = (Graphics)image.getGraphics();
     
    		/* ... */
                    return image;
            } 
     
    	public Cases() {
            }
     
    	public void paintComponent(Graphics g) {
                g.drawImage(IMAGE, 0, 0, null);
             }
     
    	public static void paintAleat(Graphics g, int x2, int y2, int x3, int y3) {
    		/* ... */
    		}
        }	
    }
    AInsi tu peux faire référence à cette image dans n'importe quelle autre classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class ListenerBleuC extends JPanel{
     
    	public ListenerBleuC() {
    		}
     
           protected void paintComponent(Graphics g) {
                    g.drawImage(Cases.IMAGE, 0, 0, null);
           }
    }
    A noter par ailleurs, qu'au lieu de conserver toutes tes variables dans l'instance de classe de Cases, alors qu'elles ne servent que lors de la création de l'image, tu pourrais écrire Cases comme ça :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    import javax.swing.*;
    import java.io.*;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.util.Random;
     
     
     
    @SuppressWarnings("serial")
    public class Cases extends JPanel {
     
    	private final BufferedImage image = 
     
     
    	public Cases() {
                new BufferedImage(706, 750, BufferedImage.TYPE_INT_RGB);
    			Graphics g = (Graphics)image.getGraphics();
     
    		  int x1=0,y1=0,x4=1,y4=1,x5=1;
     
    		  int xp1=5,xp2=5,xg1=xp1-25,xg2=xp2,xd1=xp1+25,xd2=xp2,xh1=xp1,xh2=xp2+25,xb1=xp1,xb2=xp2-25;
    		  int xp[]={xp1,xp2};
    		  int xg[]={xg1,xg2};
    		  int xd[]={xd1,xd2};
    		  int xh[]={xh1,xh2};
    		  int xb[]={xb1,xb2};
     
     
    			  g.setColor(Color.BLACK);
    			  while (x1<=706) {
    			  g.drawLine(x1, 0, x1, 600);
    			  x1+=25;
    			  }
    			  while (y1<=600) {
    			  g.drawLine(0, y1, 707, y1);
    			  y1+=25;
    			  }
    			  while (x5<=706) {
    			  paintAleat(g, x4, y4, 23, 23);
    			  x4+=25;
    			  x5+=25;
    			  }
     
    			/*    Color cpp= new Color(image.getRGB(xp1, xp2));
    				 int pr=cpp.getRed();
    			     int pg=cpp.getGreen();
    			     int pb=cpp.getBlue();
    				 int cpp1 = new Color(pr,pg,pb).getRGB();
     
     
    				 Color cpd = new Color(image.getRGB(xd1, xd2));
    				 int pr1=cpd.getRed();
    			     int pg1=cpd.getGreen();
    			     int pb1=cpd.getBlue();
    				 int cpd1 = new Color(pr1,pg1,pb1).getRGB();
     
    				 Color cpg = new Color(image.getRGB(xd1, xd2));
    				 int pr2=cpg.getRed();
    			     int pg2=cpg.getGreen();
    			     int pb2=cpg.getBlue();
    				 int cpg1 = new Color(pr2,pg2,pb2).getRGB();
     
     
    				if (cpp1==cpd1) {
    					g.setColor(new Color(pr,pg,pb));
    					g.drawRect(0, 0, 24, 49);
    					g.fillRect(0, 0, 24, 49);
    				}       */
     
    }
    	public void paintComponent(Graphics g) {
            g.drawImage(image, 0, 0, null);
    }
     
     
     
    	public static void paintAleat(Graphics g, int x2, int y2, int x3, int y3) {
    		while (y2<600) {
    			Random r = new Random();
    			int valeurMin = 1, valeurMax = 6;
    			int nr = valeurMin + r.nextInt(valeurMax - valeurMin);
    			if (nr==1) {
    				g.setColor(Color.blue);
    			}
    			if (nr==2) {
    				g.setColor(Color.red);
    			}
    			if (nr==3) {
    				g.setColor(Color.yellow);
    			}
    			if (nr==4) {
    				g.setColor(Color.green);
    			}
    			if (nr==5) {
    				g.setColor(new Color( 213, 128, 0));
    			}
    	    	g.drawRect(x2, y2, x3, y3);
    	    	g.fillRect(x2, y2, x3, y3);
    	    	y2+=25;
    		}
        }	
    }

    En plus, au sujet de getGraphics() :

    1. le contexte graphique retourné doit être libéré lorsque tu as fini de dessiner dedans pour libérer la mémoire occupée pour et qui ne sert plus à rien.
    2. accessoirement, la méthode createGraphics() remplace la méthode getGraphics() qui a été conservé pour compatibilité ascendante. L'avantage de la méthode createGraphics() est de retourner directement du typé Graphics2D, qui offre bien plus de possiblité.

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BufferedImage image = new BufferedImage(....
     
    Graphics g = image.getGraphics();
    // ou Graphics2D g = image.createGraphics();
     
    /*... on dessine ...*/
     
    g.dispose();
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut RE: Intégrer une BufferedImage à plusieurs classes
    D'acc, merci beaucoup pour tous ces conseils, je vais m'y mettre

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

Discussions similaires

  1. Attribuer une variable à plusieurs classes
    Par pitchu dans le forum Objective-C
    Réponses: 0
    Dernier message: 09/02/2016, 19h05
  2. intégrer une bibliothèque de classe en C# -> VB.net
    Par Tems2008 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 11/12/2009, 07h52
  3. [VS2005] comment organiser une solution avec plusieurs classes
    Par mahboub dans le forum Visual Studio
    Réponses: 1
    Dernier message: 15/04/2008, 10h49
  4. Réponses: 7
    Dernier message: 01/02/2008, 14h16
  5. Utilisation de plusieurs classes dans une balise
    Par scorpion.os dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 12/04/2007, 18h16

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