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

AWT/Swing Java Discussion :

Probleme dans le JPannel


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut Probleme dans le JPannel
    Bonsoir a tous,
    J'ai crée un panel contenant une image qu'on parcoure a partir du bureau...
    Mais mon problème c'est que quand je veut sélectionner une deuxième image pour remplacer la première, ca marche pas ...
    un rafraichissement du panel peut etre ... (j'ai consulté ce sujet rafraichissement de JPannel mais je crois que ce n'est pas le même problème )
    Merci pour votre aide
    voila un morceau de mon 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
                                                        JPanel encadrement = new JPanel();
                                                        encadrement.setBorder(BorderFactory.createLineBorder(Color.pink));
                                                        encadrement.setBounds(new Rectangle (360,30, 220, 180));
                                                        File monfichier = choix.getSelectedFile();
                                                        BufferedImage im = new BufferedImage(220, 180, BufferedImage.TYPE_INT_ARGB);
                                                        im = ImageIO.read(monfichier);
     
                                                        /* On dessine sur le Graphics de l'image bufferisée. */
                                                        Graphics2D g =im.createGraphics();
                                                        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                                                        Image source = im;
                                                        ManipImage manip = new ManipImage();
                                                        im = manip.Imagescale(source, 220, 180);
     
                                                        JLabel monImage = new JLabel();
                                                        monImage.setIcon(new ImageIcon(im));
                                                        encadrement.add(monImage);
                                                        pan.add(encadrement);

  2. #2
    Membre éclairé Avatar de snay13
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    Salut

    As tu essayé d'appeler la méthode repaint() sur ton jpanel après le choix de la nouvelle image

    @+

  3. #3
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Salut,

    tu peux trouver une réponse à ta question dans ce post :
    http://www.developpez.net/forums/d96...insert-dimage/

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Merci a vous deux mais je ne sais pas ou ajouter

  5. #5
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Si tu as un bouton qui permet de sélectionner une image et récupérer son chemin filePath, tu peux placer ce code dans la méthode actionPerfomed associé à ton bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    icon = new ImageIcon(filePath);
    img = new JLabel(icon);
    ton_panneau.removeAll();
    ton_panneau.add(img);
    ton_panneau.validate();

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    En faite Slim moi j'ajoute un lablel contenant une image au panneau comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    JPanel encadrement = new JPanel();
    File monfichier = choix.getSelectedFile();
                                                        BufferedImage im = new BufferedImage(220, 180, BufferedImage.TYPE_INT_ARGB);
                                                        im = ImageIO.read(monfichier);
                                                        JLabel monImage = new JLabel();
                                                        monImage.setIcon(new ImageIcon(im));
                                                        encadrement.add(monImage);
                                                        pan.add(encadrement);
    J'ai essayé le truc que vous m'avez passé mais ca ne marche pas

  7. #7
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Bonjour,

    De mon point de vue, la méthodologie n'est pas la bonne. Il me semble préférable de définir les composants une fois pour toutes dès le départ, et de se contenter ensuite d'affecter une ImageIcon au Label lorsqu'une image est demandé par l'utilisateur. Il convient donc de créer une méthode dédié au chargement et à la mise à jour du label. Il est plus lourd de supprimer puis réaffecter des composants, d'autant plus que cela n'est pas justifié.

    Voici un exmple décrivant ce principe simple :
    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
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import java.io.*;
    import javax.imageio.*;
    import javax.swing.*;
     
    public class Fenetre extends JFrame {
     
    	public static void main(String[] args) {
    		Fenetre frame = new Fenetre();
    		frame.pack();
    		frame.setVisible(true);
    	}
     
    	private JLabel monLabelImage;
     
    	public Fenetre() {
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		JPanel encadrement = new JPanel(new BorderLayout());
    		this.monLabelImage = new JLabel();
    		JScrollPane scroll = new JScrollPane(this.monLabelImage);
    		scroll.getViewport().setPreferredSize(new Dimension(400, 300));
    		encadrement.add(scroll, BorderLayout.CENTER);
    		JButton btnLoad = new JButton("Charger une image");
    		encadrement.add(btnLoad, BorderLayout.SOUTH);
    		setContentPane(encadrement);
    		btnLoad.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				loadImage();
    			}
    		});
    	}
     
    	private void loadImage() {
    		JFileChooser chooser = new JFileChooser();
    		chooser.showOpenDialog(this);
    		File monfichier = chooser.getSelectedFile();
    		try {
    			BufferedImage image = ImageIO.read(monfichier);
    			this.monLabelImage.setIcon(new ImageIcon(image));
    		} catch (Exception e) {
    			// erreur
    			this.monLabelImage.setIcon(null);
    			e.printStackTrace();
    		}
    	}
     
    }

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Merci a tous c'est réglé

  9. #9
    Membre actif Avatar de arafat877
    Inscrit en
    Septembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 46
    Par défaut Solution
    Salut !
    Je te propose deux solutions :
    1) utilise cette classe :
    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
     
    import javax.imageio.*;
    import javax.swing.*;
    import java.awt.*;
    import java.io.*;
     
    public class JImagePanel extends JPanel {
     
    	private static final long serialVersionUID = 2724980460740151616L;
     
    	private Image _image;
    	private int _x;
    	private int _y;
    	private boolean _autoSize; 
    	private boolean _keepAspect;
     
    	public JImagePanel(File file, int x, int y, boolean autoSize, boolean keepAspect) throws IOException {
    		super();
     
    		setImage(ImageIO.read(file));
    		setX(x);
    		setY(y);
    		setAutoSize(autoSize);
    		setKeepAspect(keepAspect);
    	}
     
    	public JImagePanel(File file, int x, int y, boolean autoSize) throws IOException {
    		this(file, x, y, true, false);
    	}
     
    	public JImagePanel(File file, int x, int y) throws IOException {
    		this(file, x, y, true);
    	}
     
    	public JImagePanel(File file) throws IOException {
    		this(file, 0, 0, true);
    	}
     
    	public JImagePanel(Image image, int x, int y, boolean autoSize, boolean keepAspect) {
    		super();
     
    		setImage(image);
    		setX(x);
    		setY(y);
    		setAutoSize(autoSize);
    		setKeepAspect(keepAspect);
    	}
     
    	public JImagePanel(Image image, int x, int y, boolean autoSize) {
    		this(image, x, y, true, false);
    	}
     
    	public JImagePanel(Image image, int x, int y) {
    		this(image, x, y, true);
    	}
     
    	public JImagePanel(Image image) {
    		this(image, 0, 0, true);
    	}
     
    	public JImagePanel() {
    		super();
    		setX(0);
    		setY(0);
    		setImage(null);
    		setAutoSize(false);
    	}
     
    	public void setImage(Image image) {
    		_image = image;
    	}
     
    	public void setX(int x) {
    		_x = x;
    	}
     
    	public void setY(int y) {
    		_y = y;
    	}
     
    	public void setAutoSize(boolean autoSize) {
    		_autoSize = autoSize;
    	}
     
    	public void setKeepAspect(boolean keepAspect) {
    		_keepAspect = keepAspect;
    	}
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
     
    		if (_image != null) {
    			if (!_autoSize) {
    				g.drawImage(_image, _x, _y, _image.getWidth(null), _image.getHeight(null), null);
    			}
    			else {
    				Graphics2D g2d = (Graphics2D) g;
    				Double scaleWidth = new Double(getWidth()) / new Double(_image.getWidth(null));
    				Double scaleHeight = new Double(getHeight()) / new Double(_image.getHeight(null));
    				if (_keepAspect) {
    					if (scaleWidth > scaleHeight) {
    						scaleWidth = scaleHeight;
    					}
    					else {
    						scaleHeight = scaleWidth;
    					}
    				}
    				g2d.scale(scaleWidth, scaleHeight);
    				g2d.drawImage(_image, _x, _y, null);
    			}
    		}
    	}
     
    }
    2) télécharger cette biblio, elle contiènne une super classe JImagePanel :
    http://www.oursland.net/projects/our...nd-util.tar.gz

    Bon courage

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

Discussions similaires

  1. Probleme dans request.QueryString("chaine")
    Par soufienne dans le forum ASP
    Réponses: 8
    Dernier message: 24/08/2004, 14h49
  2. Probleme dans une procedure stockée
    Par malbaladejo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/07/2004, 14h08
  3. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51
  4. Probleme dans une clause like !
    Par adil dans le forum Langage SQL
    Réponses: 6
    Dernier message: 15/07/2003, 16h47
  5. Probleme dans ma requete
    Par Kuroro dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2003, 11h14

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