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

2D Java Discussion :

Copie d'image d'un JPanel vers un autre


Sujet :

2D Java

  1. #1
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2009
    Messages : 167
    Points : 118
    Points
    118
    Par défaut Copie d'image d'un JPanel vers un autre
    Je souhaite copier l'image contenue dans un JPanel dans un autre JPanel. Cela ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private JPanel m_background = new JPanel();
    private JPanel m_drawings = new JPanel();
     
    //get the picture
    BufferedImage image = new BufferedImage(  m_drawings.getWidth(), m_drawings.getHeight(), BufferedImage.TYPE_INT_RGB);	
    Graphics2D g = image.createGraphics();
    m_drawings.paintAll( g);
    g.dispose();
     
     
    //draw the picture
    Graphics g2 =  m_background.getGraphics();
    g2.drawImage( image, 50, 50, 100, 100, null);
    g2.dispose();
    Impossible d'afficher la seconde image... Seulement un bloc de la bonne taille, mais gris...

    Une idée ?

    Christian

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    bonjour,

    tu as mis quelque chose dans m_drawings ???

    parce que j'ai repris ton code pour faire un exemple et ça fonctionne !!!

    Appuie sur le bouton copier pour copier le panel vert dans le panel bleu

    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
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
     
     
    public class CopyPanel extends JFrame implements ActionListener {
     
    	JPanel source = new JPanel();
    	JPanel destination = new JPanel();
    	JButton bouton = new JButton("copier");
     
    	public CopyPanel() {
    		setSize(650,450);
    		JPanel panel = new JPanel();
    		source.setPreferredSize(new Dimension(200,200));
    		source.setBackground(Color.green);
    		destination.setPreferredSize(new Dimension(400,400));
    		destination.setBackground(Color.blue);
    		bouton.addActionListener(this);
    		source.add(bouton);
    		source.add(new JTextArea("coucou",5,3));
    		panel.add(source);
    		panel.add(destination);
    		add(panel);
    		setVisible(true);
     
    	}
     
    	public static void main(String[] args) {
    		CopyPanel cp = new CopyPanel();
    	}
     
    	public void copier() {
    		BufferedImage image = new BufferedImage(  source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_RGB);	
    		Graphics2D g = image.createGraphics();
    		source.paintAll( g);
    		g.dispose();
     
     
    		//draw the picture
    		Graphics g2 =  destination.getGraphics();
    		g2.drawImage( image, 50, 50, image.getWidth(), image.getHeight(), null);
    		g2.dispose();	
    	}
     
    	public void actionPerformed(ActionEvent a) {
    		copier();	
    	}
    }

  3. #3
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2009
    Messages : 167
    Points : 118
    Points
    118
    Par défaut
    Merci de ta réponse.

    Ton exemple fonctionne très bien. J'ai ajouté le dessin dans source avec ce code :

    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
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
     
     
    public class test extends JFrame implements ActionListener {
     
    	private static final long serialVersionUID = 1L;
    	JPanel source = new JPanel();
    	JPanel destination = new JPanel();
    	JButton bouton = new JButton("copier");
     
    	public test() {
    		setSize(650,450);
    		JPanel panel = new JPanel();
    		source.setPreferredSize(new Dimension(200,200));
    		source.setBackground(Color.green);
     
    		destination.setPreferredSize(new Dimension(400,400));
    		destination.setBackground(Color.blue);
     
    		bouton.addActionListener(this);
     
    		source.add(bouton);
    		source.add(new JTextArea("coucou",5,3));
    		panel.add(source);
    		panel.add(destination);		
    		add(panel);
     
    		setVisible(true);
     
    	}
     
    	public static void main(String[] args) {
    		new test();
    	}
     
    	public void copier() {
     
    		//draw an image in source
    		Graphics g3 = source.getGraphics();
    		Image img1 = Toolkit.getDefaultToolkit().getImage("test.png");
     
    		MediaTracker tracker = new MediaTracker(this);
    		tracker.addImage(img1, 0);
    		try { tracker.waitForID(0); }
    		catch(InterruptedException e) {}
     
    		g3.drawImage(img1, 0, 0, this);
    		g3.dispose();		
     
     
    		BufferedImage image = new BufferedImage(  source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_RGB);	
    		Graphics2D g = image.createGraphics();
    		source.paintAll( g);
    		g.dispose();
     
    		//draw the picture
    		Graphics g2 =  destination.getGraphics();
    		g2.drawImage( image, 50, 50, image.getWidth(), image.getHeight(), null);
    		g2.dispose();
     
    	}
     
     
    	public void actionPerformed(ActionEvent a) {
    		copier();	
    	}
    }
    Il faut palcer une image test.png à la racine.

    Cette image est bien dessinnée dans source, mais la copie qui s'effectue dans la foulée vers destination ne la prend pas en compte...


  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    bonjour,

    si tu introduis des dessins ou images il y a effectivement quelques petites modifications à faire.

    ici j'ai créer une classe à part pour la variable source afin de pouvoir redefinir sa méthode paintComponent().

    l'image étant maintenant affichée en premier, la méthode setBackground(Color.green) ne fonctionne plus je l'ai donc enlevée

    comme on n'a pas défini de couleur de fond, lorsque l'on crée la BufferedImage avant de copier celle-ci s'affiche avec un fond noir.



    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
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import java.io.*;
    import javax.imageio.*;
     
    public class CopyPanel extends JFrame implements ActionListener {
     
    	private static final long serialVersionUID = 1L;
    	Panel1 source = new Panel1();
    	JPanel destination = new JPanel();
    	JButton bouton = new JButton("copier");
    	BufferedImage img;
     
    	public CopyPanel() {
    		setSize(650,500);
    		JPanel panel = new JPanel();
    		destination.setPreferredSize(new Dimension(400,400));
    		destination.setBackground(Color.blue);
    		bouton.addActionListener(this);
    		add(bouton,BorderLayout.NORTH);
    		source.add(new JTextArea("coucou",5,3));
    		panel.add(source);
    		panel.add(destination);		
    		add(panel);
    		setVisible(true);
    	}
     
    	public static void main(String[] args) {
    		new CopyPanel();
    	}
     
    	public void copier() {	
     
    		BufferedImage image = new BufferedImage(  source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_RGB);
    		Graphics2D g = image.createGraphics();
    		source.paintAll( g);
    		g.dispose();
    		Graphics g2 =  destination.getGraphics();
    		g2.drawImage( image, 50, 50, image.getWidth(), image.getHeight(), null);
    		g2.dispose();
     
     
     
    	}
     
    	public void actionPerformed(ActionEvent a) {
    		copier();	
    	}
     
    	public class Panel1 extends JPanel {
    		BufferedImage img;
     
    		public Panel1() {
    			setPreferredSize(new Dimension(200,200));
    		}
     
    		public void paintComponent(Graphics g) {
     
    			try {
    				img = ImageIO.read(new File("test.png"));
    			}
    			catch(IOException e) {}
    			g.drawImage(img,0,0,img.getWidth(),img.getHeight(),this);
    		}
    	}
    }

    pour éviter le fond noir, tu peux créer une BufferedImage transparente en changeant le type

    change BufferedImage.TYPE_INT_RGB en BufferedImage.TYPE_INT_ARGB

    Si tu veux mettre un fond a la source et à la destination, tu peux dessiner un rectangle coloré dans la méthode paintComponent de la source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void paintComponent(Graphics g) {
     
                            g.setColor(Color.green);
                            g.fillRect(0,0,200,200);
    			try {
    				img = ImageIO.read(new File("test.png"));
    			}
    			catch(IOException e) {}
    			g.drawImage(img,0,0,img.getWidth(),img.getHeight(),this);
    		}

  5. #5
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2009
    Messages : 167
    Points : 118
    Points
    118
    Par défaut
    Un grand merci pour tes exemples. J'y suis arrivé.

    Christian

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

Discussions similaires

  1. [Lazarus] Copie d'image d'un format vers un autre
    Par Jon Shannow dans le forum Lazarus
    Réponses: 2
    Dernier message: 16/07/2012, 16h20
  2. [XL-2007] Copy de fichier image d'un répertoire vers un autre répertoire
    Par pagail dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/03/2010, 14h15
  3. copie des données d'un champ vers un autre
    Par cvlpj dans le forum IHM
    Réponses: 10
    Dernier message: 26/12/2006, 22h15
  4. copie d'une zone de texte vers une autre zone de texte
    Par db48752b dans le forum Access
    Réponses: 7
    Dernier message: 23/08/2006, 08h41
  5. Copie du contenu d'un répertoire vers un autre
    Par IG88 dans le forum Windows
    Réponses: 4
    Dernier message: 30/07/2004, 14h33

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