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

Interfaces Graphiques en Java Discussion :

Problème sauvegarde Canvas


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 46
    Points
    46
    Par défaut Problème sauvegarde Canvas
    Bonjour.
    J'ai un soucis avec mon canvas, je souhaiterai enregistrer ce qu'il y a dedans dans un fichier .jpeg.
    Mais, lorsque j'ouvre mon fichier .jpeg, ça me met un dessin tout noir (avec les dimensions de mon canvas)

    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.awt.geom.Rectangle2D;
    import java.awt.geom.Ellipse2D;
    import java.io.*; //File et IOException
     
     
     
    public class Main extends JFrame implements MouseListener, MouseMotionListener {
    	int x0=0, y0=0,taille=4;
        Canvas c;
    	public static void main(String[] args){
    		new Main();
    	}
     
    	public Main(){
    		super("Dessin");
    	    //Frame
    		this.setSize(850,600);
    		this.setVisible(true);
     
    		//Radios taille du trait
    		JRadioButton petit = new JRadioButton("Petit");
    		petit.addChangeListener(new ChangeListener(){
    			public void stateChanged(ChangeEvent e){
    				taille = 2;}});
    		JRadioButton moyen = new JRadioButton("Moyen");
    		moyen.addChangeListener(new ChangeListener(){
    			public void stateChanged(ChangeEvent e){
    				taille = 4;}});
    		JRadioButton grand = new JRadioButton("Grand");
    		grand.addChangeListener(new ChangeListener(){
    			public void stateChanged(ChangeEvent e){
    				taille = 6;}});
     
    		//JToolBar
    		JToolBar bar = new JToolBar();
    		this.getContentPane().add(bar,BorderLayout.PAGE_START);
    		bar.setFloatable(true);
    		bar.add(petit);
    		bar.add(moyen);
    		bar.add(grand);
     
    		//Groupement des radios tailles
    		ButtonGroup bg = new ButtonGroup();
    		bg.add(petit);
    		bg.add(moyen);
    		bg.add(grand);
    		moyen.setSelected(true);
     
    		//Sauvegarder
    		JButton sauvegarde = new JButton("Sauvegarder");
    		bar.add(sauvegarde);
    		sauvegarde.addActionListener(new SauvegardeListener());
     
    		//Canvas du dessin
    		c = new Canvas();
    		this.getContentPane().add(c);
    		c.setBackground(Color.WHITE);
    		c.addMouseListener(this);
    	        c.addMouseMotionListener(this);
     
     
    	}
     
    	public void saveImage(Component component, File destination){
    		BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB);
     
    		Graphics2D g2d = image.createGraphics();
    		component.paint(g2d);
    		g2d.dispose();
     
    		try {
    			ImageIO.write(image, "jpeg", destination);
    		} catch (IOException e) {      
    			e.printStackTrace();
    		} 
    	}
     
    	private class SauvegardeListener implements ActionListener{
    		public void actionPerformed(ActionEvent e){
    			File f = new File("C:/Documents and Settings/Administrateur/Bureau/test.jpeg");
    			saveImage(c, f);
    		}
    	}
     
     
    	//Lorsqu'on presse la souris
    	public void mousePressed(MouseEvent e){
    		x0 = e.getX();
    		y0 = e.getY();
    	}
     
    	//Lorsqu'on bouge la souris avec le curseur enfoncé
    	public void mouseDragged(MouseEvent e){
    		int x,y;
     
    		Graphics2D g = (Graphics2D) e.getComponent().getGraphics();
    		x = e.getX();
    		y = e.getY();
     
    		g.setStroke(new BasicStroke(taille)); //Epaisseur du trait
    		g.drawLine(x0, y0, x, y);
    		x0=x; y0=y;
    	}
     
    	public void mouseEntered(MouseEvent e) {}
    	public void mouseExited(MouseEvent e) {}
    	public void mouseReleased(MouseEvent e) {}
    	public void mouseMoved(MouseEvent e) {}
    	public void mouseClicked(MouseEvent e) {}
     
    	public void windowClosed(WindowEvent e){ System.exit(0);} //Terminer le processus lors de la fermeture
    }

    Je n'ai pas redéfini la méthode paint(), ça vient peut être de ça, mais quand je l'a redéfinie en mettant un trait dedans, ça ne marche quand même pas ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public void paint(Graphics g) {
        	// Tracer une ligne rouge entre les points (x=5, y=30) et (x=50, y=70)
        	Graphics2D g2d = (Graphics2D) g;
        	g2d.setColor(Color.red);
        	g2d.drawLine(5, 30, 50, 70);
        }

    Merci d'avance pour votre aide, car je ne comprend pas mon problème.

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    On ne mélange pas AWT et Swing !
    Canvas c'est AWT ! Tout le reste que tu utilises c'est Swing...
    Il faut choisir
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    Salut,

    Voici le code corrigé :

    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.awt.image.RenderedImage;
    import java.awt.geom.Rectangle2D;
    import java.awt.geom.Ellipse2D;
    import java.io.*; //File et IOException
     
     
     
    public class Main extends JFrame implements MouseListener, MouseMotionListener {
    	int x0=0, y0=0,taille=4;
        Canvas c;
        BufferedImage bufferedImage;
        
    	public static void main(String[] args){
    		new Main();
    	}
    	
    	public Main(){
    		super("Dessin");
    	    //Frame
    		this.setSize(850,600);
    		this.setVisible(true);
    		
    		//Radios taille du trait
    		JRadioButton petit = new JRadioButton("Petit");
    		petit.addChangeListener(new ChangeListener(){
    			public void stateChanged(ChangeEvent e){
    				taille = 2;}});
    		JRadioButton moyen = new JRadioButton("Moyen");
    		moyen.addChangeListener(new ChangeListener(){
    			public void stateChanged(ChangeEvent e){
    				taille = 4;}});
    		JRadioButton grand = new JRadioButton("Grand");
    		grand.addChangeListener(new ChangeListener(){
    			public void stateChanged(ChangeEvent e){
    				taille = 6;}});
    		
    		//JToolBar
    		JToolBar bar = new JToolBar();
    		this.getContentPane().add(bar,BorderLayout.PAGE_START);
    		bar.setFloatable(true);
    		bar.add(petit);
    		bar.add(moyen);
    		bar.add(grand);
    		
    		//Groupement des radios tailles
    		ButtonGroup bg = new ButtonGroup();
    		bg.add(petit);
    		bg.add(moyen);
    		bg.add(grand);
    		moyen.setSelected(true);
    		
    		//Sauvegarder
    		JButton sauvegarde = new JButton("Sauvegarder");
    		bar.add(sauvegarde);
    		sauvegarde.addActionListener(new SauvegardeListener());
    		
    		//Canvas du dessin
    		//c = new Canvas();
    		c= new Canvas();
    		this.getContentPane().add(c);
    		c.setBackground(Color.WHITE);
    		c.addMouseListener(this);
    	    c.addMouseMotionListener(this);	    
    	    
    		bufferedImage = (BufferedImage)c.createImage(this.getWidth() , this.getHeight());//====>>>>>>Creation de l'image
    	}
        
    	public void saveImage(File destination){
    		try {
    			ImageIO.write(bufferedImage, "jpg", destination);//======>>>>>>>>>>>>>Enregistrement de l'image
    		} catch (IOException e) {      
    			e.printStackTrace();
    		} 
    	}
    	
    	private class SauvegardeListener implements ActionListener{
    		public void actionPerformed(ActionEvent e){
    			File f = new File("test.jpg");
    			saveImage(f);
    		}
    	}
    	
    	
    	//Lorsqu'on presse la souris
    	public void mousePressed(MouseEvent e){
    		x0 = e.getX();
    		y0 = e.getY();
    	}
    	
    	//Lorsqu'on bouge la souris avec le curseur enfoncé
    	public void mouseDragged(MouseEvent e){
    		int x,y;
     
    		Graphics2D g = (Graphics2D)bufferedImage.getGraphics();//========>>>>>>>>>>>récupération du Graphics c'est celui-ci qui va être changé
    		Graphics2D g2 = (Graphics2D) e.getComponent().getGraphics();
    		x = e.getX();
    		y = e.getY();
    		
    		g.setStroke(new BasicStroke(taille)); //Epaisseur du trait
    		g.drawLine(x0, y0, x, y);
    		x0=x; y0=y;
    
    		g2.drawImage(bufferedImage, 0, 0, null);//==========>>>>>>>Un fois l'image terminée, elle est placée dans le graphique correspondant au canvas
    	}
    	
    	public void mouseEntered(MouseEvent e) {}
    	public void mouseExited(MouseEvent e) {}
    	public void mouseReleased(MouseEvent e) {}
    	public void mouseMoved(MouseEvent e) {}
    	public void mouseClicked(MouseEvent e) {}
     
    	public void windowClosed(WindowEvent e){ System.exit(0);} //Terminer le processus lors de la fermeture
    }
    Voilà A++

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Ca ne change pas le fait qu'il ne faut pas mélanger AWT et Swing, tu construis ainsi une application bancale.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    Salut,

    Je ne suis pas là pour refaire son code de zéro

    Je lui dis simplement comment le corriger.

    Mais il est vrai que c'est pas très bien de mélanger les deux.

    A++

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 46
    Points
    46
    Par défaut
    Ah d'accord, je ne savais pas que c'était pas bien de mélanger les 2 :s (car avec l'un, on peut faire certaines choses que l'autre n'arrive pas donc voilà pourquoi je mélange ^^)

    Merci bien, je vais tester avec ta correction :]



    Edit : Impeccable, ça marche ! ça va me permettre de résoudre mon soucis sur le fait qu'à chaque fois que j'agrandis, réduis ma JFrame, mon canvas s'efface ^^
    Merci beaucoup ! car ça faisait 2jrs que j'étais dessus et je n'arrivais pas à résoudre le problème !

  7. #7
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par Hujii Voir le message
    Ah d'accord, je ne savais pas que c'était pas bien de mélanger les 2 :s (car avec l'un, on peut faire certaines choses que l'autre n'arrive pas donc voilà pourquoi je mélange ^^)
    Swing sait faire tout ce qu'AWT sait faire.
    Si tu fais du Swing, n'utilise pas AWT c'est tout. C'est faux et ça va te causer d'autres problèmes.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par natha Voir le message
    Swing sait faire tout ce qu'AWT sait faire.
    Si tu fais du Swing, n'utilise pas AWT c'est tout. C'est faux et ça va te causer d'autres problèmes.
    Ah d'accord ! J'étais persuadé du contraire ! Ou sinon j'ai du confondre car j'avais vu par exemple qu'avec l'un on ne pouvait pas afficher une image dans un bouton, mais qu'avec l'autre, oui ! (un tuto ici sur developpez :p)

  9. #9
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    C'est possible car AWT fait moins de choses que Swing, mais comme je l'ai dit, Swing sait faire tout ce qu'AWT sait faire.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Points : 46
    Points
    46
    Par défaut
    D'accord pas de soucis !
    Donc le mieux c'est d'utiliser swing à prioris ^^
    Merci bien

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

Discussions similaires

  1. Problème Sauvegarde NTBackup
    Par TheNet dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 05/06/2007, 17h18
  2. problème sauvegarde hebdomadaire
    Par elharet dans le forum Oracle
    Réponses: 4
    Dernier message: 02/03/2007, 15h14
  3. [HTML2PDF] Problème sauvegarde (output)
    Par forst dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/12/2006, 23h46
  4. [MS SQL Serveur 2000] Problème sauvegarde restauration
    Par m-mas dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/11/2005, 12h25
  5. [D6] Problème de canvas avec MessageDlg
    Par dridri86 dans le forum Langage
    Réponses: 9
    Dernier message: 12/07/2005, 13h44

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