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

Applets Java Discussion :

Probleme sur mon applet image


Sujet :

Applets Java

  1. #1
    Invité(e)
    Invité(e)
    Par défaut Probleme sur mon applet image
    Salut,
    J'ai créer un applet de redimensionnement d'image. Cela marche bien mais à un petit détails près. Dans mon applet on sélectionne le fichier à redimensionner et ensuite on clique sur enregistrer pour l'enregistrer sur c:/essai.jpg.

    Le problème est que par exemple si on sélectionne une première fois un fichier et que l'on en sélectionne un autre ensuite quand on clic sur enregistrer cela enregistre toujours l'image du premier fichier et je vous avoue qu'après avoir longuement cherché je ne trouve pas mon ou mes erreurs. Je pense que cela vient e l'écouteur du bouton enregistrer qui ne prend pas la nouvelle image mais je ne vois pas du tout comment faire.

    Voici le code :
    Classe de MonApplet:
    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
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.JApplet;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    public class MonApplet extends JApplet implements ActionListener {
     
    	JButton ouvrir = new JButton("Selectionner un fichier"); // bouton ouvrir
     
    	JButton enregistrer = new JButton("Enregistrer"); // bouton enregistrer
     
    	JTextField statut = new JTextField("Pas de fichier chargé!"); // bouton champs de texte
     
    	JPanel panelBouton = new JPanel();
     
    	JPanel panelImage = new JPanel();
     
    	JFileChooser chooser;
     
    	BufferedImage monImage;
     
    	int nb = 0;
     
    	public void init() {
    		// this.getContentPane().setSize(500, 500);
    		// monPanel.setSize(500, 500);
    		panelBouton.setBackground(Color.gray);
    		panelImage.setBackground(Color.white);
     
    		panelBouton.setMinimumSize(new Dimension(this.getWidth(), (int) (this
    				.getHeight() * 0.5)));
    		panelImage.setMinimumSize(new Dimension(this.getWidth(), (int) (this
    				.getHeight() * 0.5)));
     
    		ouvrir.addActionListener(this);
    		panelBouton.add(ouvrir);
    		panelBouton.add(statut);
     
    		this.getContentPane().add(panelBouton, BorderLayout.NORTH);
    		this.getContentPane().add(panelImage, BorderLayout.SOUTH);
     
    		System.out.println("OK etape1");
     
    	}
     
    	public void paint(Graphics g) {
     
    		try {
    			// Ecouteur bouton enregistrer
    			EcouteurEnregistrer ec2 = null;
    			panelBouton.add(enregistrer, BorderLayout.EAST);
     
    			monImage = ImageIO.read(new File(statut.getText()));
    			int proportionH = monImage.getHeight() / 200;
    			int largeur = monImage.getWidth() / proportionH;
    			int hauteur = 200;
    			g.drawImage(monImage, 100, 100, largeur, hauteur, this);
     
    			enregistrer.removeActionListener(ec2);
    			ec2 = new EcouteurEnregistrer(monImage);
    			enregistrer.addActionListener(ec2);
     
    			System.out.println("OK normalement dans le try de image ");
    		} catch (IOException e) {
    			System.out.println("exception try image " + e);
    		}
    	}
     
    	public void actionPerformed(ActionEvent evt) {
    		chooser = new JFileChooser();// création dun filechosser
    		chooser.setApproveButtonText("OK"); // intitulé du bouton
    		if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
    			statut.setText(chooser.getSelectedFile().getAbsolutePath()); // affichage chemin dans txt
    			statut.getText();
    			repaint();
    		}
    	}
     
     
     
    	public void start() {
     
    	}
     
    	public void stop() {
     
    	}
     
    	public void destroy() {
     
    	}
     
    }
    Classe écouteur du bouton enregistrer :
    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
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import javax.imageio.ImageIO;
     
     
     
    public class EcouteurEnregistrer implements ActionListener{
     
    	BufferedImage monImage;
     
    	public EcouteurEnregistrer(BufferedImage imageRecup) {
     
    		monImage = imageRecup;
     
    	}
    	public void actionPerformed(ActionEvent e) {
     
    		try {
    			int proportionH = monImage.getHeight() / 200;
    			int largeur = monImage.getWidth() / proportionH;
    			int hauteur = 200;
    			System.out.println("largeur: "+largeur+" - hauteur: "+hauteur);
    			Image image = monImage.getScaledInstance(largeur, hauteur, BufferedImage.SCALE_SMOOTH);
    			image.flush();
    			monImage = new BufferedImage(largeur, hauteur, BufferedImage.TYPE_INT_RGB);
    			monImage.createGraphics().drawImage(image, 0, 0, null);
    			monImage.flush();
     
     
    			File fileWrite = new File("C:\\essai.jpg");
    			// On sauve l'image
    			ImageIO.write(monImage, "JPEG", fileWrite);
    			System.out.println("fichier enregistrer");
     
    		} catch (Exception e1) {
    		    System.out.println("erreur ecouteur enregistrer : "+e1);
    		}
     
    	}
     
    }
    Merci d'avance pour vos solutions
    Dernière modification par Invité(e) ; 13/05/2008 à 14h46.

  2. #2
    Membre confirmé Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 505
    Points
    505
    Par défaut
    Le problème est là :
    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
    public void paint(Graphics g) {
    
    	try {
    		// Ecouteur bouton enregistrer
    		EcouteurEnregistrer ec2 = null;
    		panelBouton.add(enregistrer, BorderLayout.EAST);
    
    		monImage = ImageIO.read(new File(statut.getText()));
    		int proportionH = monImage.getHeight() / 200;
    		int largeur = monImage.getWidth() / proportionH;
    		int hauteur = 200;
    		g.drawImage(monImage, 100, 100, largeur, hauteur, this);
    
    		enregistrer.removeActionListener(ec2);
    		ec2 = new EcouteurEnregistrer(monImage);
    		enregistrer.addActionListener(ec2);
    
    		System.out.println("OK normalement dans le try de image ");
    	} catch (IOException e) {
    		System.out.println("exception try image " + e);
    	}
    }
    Le bouton 'enregistrer' se timbale tous les listeners qui ont été créés à chaque affichage...

    Perso, la methode paint ne devrait contenir que "g.drawImage(monImage, 100, 100, largeur, hauteur, this);", le reste n'a rien à faire dans cette méthode.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Ok je suis d'accord avec toi mais comment l'écouteur de mon bouton enregistrer se met à jour avec le nouveau chemin de l'image. C'est cela que je pense que je n'arrive pas à faire...

    Car là j'ai essayé de mettre le bouton et les écouteur dans la methode init() mais plus rien ne marche ...

    Merci
    Dernière modification par Invité(e) ; 13/05/2008 à 16h33.

  4. #4
    Membre confirmé Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 505
    Points
    505
    Par défaut
    Une idée, à la place de l'objet EcouteurEnregistrer crée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class SaveButton extends JButton  implements ActionListener {
     
    	...
     
    	public void setImage(BufferedImage imageRecup) { ... }
     
    	...
     
    	public void actionPerformed(ActionEvent e) { ... }
     
    }
    Pour après avoir dans MonApplet :
    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
     
    public void actionPerformed(ActionEvent evt) {
    	chooser = new JFileChooser();// création dun filechosser
    	chooser.setApproveButtonText("OK"); // intitulé du bouton
    	if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
    		statut.setText(chooser.getSelectedFile().getAbsolutePath()); // affichage chemin dans txt
    		statut.getText();
     
    		// ... clacul de monImage ...
     
    		enregister.setImage(monImage);
     
    		repaint();
    	}
    }

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Ok bonne idée j'essaye dès demain je pense que cela devrait marcher.
    Mais je met rien dans la méthode setImage() ?
    Merci

  6. #6
    Membre confirmé Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 505
    Points
    505
    Par défaut
    Mais je met rien dans la méthode setImage() ?
    Qu'en penses-tu ?

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Désolé j'avais lu rapidement je m'y suis remis et ta solution marche parfaitement merci beaucoup.
    Etant donné que tu m'as l'air assez doué en JAVA j'en profite pour te poser une autre question. La dans mon cas j'ai réussi à redimensionner puis enregistrer l'image sur le disque de l'utilisateur. Je voudrais maintenant pouvoir envoyer cette image à un serveur est ce possible et si oui comment ?
    Merci

  8. #8
    Membre confirmé Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 505
    Points
    505
    Par défaut
    Je voudrais maintenant pouvoir envoyer cette image à un serveur est ce possible et si oui comment ?
    Cela dépend du protocole que tu souhaites utiliser mais quoiqu'il en soit tu ne peux pas le faire avec l'api standard. Regarde ici il y a plusieurs librairies qui permettent de le faire.

Discussions similaires

  1. probleme d'affichage sur mon applet
    Par stc074 dans le forum Applets
    Réponses: 3
    Dernier message: 25/09/2010, 21h54
  2. nouveaux problemes sur mon WebBrowser
    Par kor6k dans le forum MFC
    Réponses: 5
    Dernier message: 18/09/2006, 10h04
  3. Probleme sur ajout d'image
    Par Federico_28 dans le forum Access
    Réponses: 1
    Dernier message: 25/04/2006, 09h29
  4. avie et probleme sur mon site
    Par coucou449 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/12/2005, 09h34
  5. [FLASH MX] Probleme sur mon site....!!
    Par thewill dans le forum Flash
    Réponses: 2
    Dernier message: 07/04/2005, 12h11

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