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 :

Changer la source d'une image dans un panel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 118
    Par défaut Changer la source d'une image dans un panel
    Bonjour,

    J'ai une frame qui contient un panel. Dans ce panel, je veux y mettre une image. Et grace à un FileChoose, je veux pouvoir selectionner une image pour changer l'image actuellement affiché mais je n'y arrive pas après avoir passé un week end, après avec regardé les tutoriels, google, etc... Donc mon dernier recours, c'est vous !

    Voici 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
    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
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
    package hci2;
     
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
     
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingConstants;
    import javax.swing.border.BevelBorder;
     
     
    public class Interface extends JFrame implements ActionListener {
     
    	//Variables
     
    	//Panel
    	private JPanel RootPanel = new JPanel();
    	private JPanel LeftMenuPanel = new JPanel();
    	private JPanel TopMenuPanel = new JPanel();
     
    	//Label
    	JLabel imageLabel = new JLabel();
     
    	//ImageIcon
     
     
    	//Button
    	JButton openButton = new JButton("Open an image...");
     
    	//JFileChooser
    	JFileChooser fileChooser = new JFileChooser();
     
    	//String
    	private String currentFile;
     
    	private static final long serialVersionUID = 1L;
     
    	public Interface() {
     
    	    this.setTitle("HCI: Exercise 4");
    	    this.setSize(400,400);
     
    	    this.openButton.addActionListener(this);
    	    this.LeftMenuPanel.add(openButton);
     
    	    //Panel for the rest
    	    RootPanel.setBorder(new BevelBorder(BevelBorder.RAISED));
    	    RootPanel.setLayout(new GridLayout(1,1));
     
    	    this.getContentPane().add("Center", RootPanel);
    	    this.getContentPane().add("West", LeftMenuPanel);
    	    this.getContentPane().add("North", TopMenuPanel);
     
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
     
            //Handle open button action.
            if (e.getSource() == openButton) {
     
        		int returnVal = fileChooser.showOpenDialog(this);
     
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = fileChooser.getSelectedFile();
                    String path = file.getPath();
                    path = path.replace("\\","\\\\");
                    //This is where a real application would open the file.
                	currentFile = path;
                	System.out.println(path);
                	this.refresh(path);
     
     
                } else {
     
                }
     
            }	
     
    	}
     
     
    	  public void refresh(String path) {
     
    		// Picture
    	   /*
    	   JLabel picture = new JLabel();
    	   picture.setHorizontalAlignment(SwingConstants.CENTER);
    	   Icon icon = new IconJAI();
    	   */
     
     
    		ImageIcon image = new ImageIcon(path);
    		imageLabel.setText(null);
    		imageLabel.setIcon(image);
     
    		//  Container imagePanel = new JPanel(); //use FlowLayout
    		// imagePanel.add(imageLabel);
     
     
     
    		this.RootPanel.removeAll();
    		this.RootPanel.add(imageLabel);
     
    	    //this.getContentPane().add(imagePanel);
    	    //this.pack();
    	    //this.setVisible(true);
    		}
     
     
     
      static public void main(String args[]){
     
    	Interface j = new Interface();
    	j.setVisible(true);
    	j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }	
     
     
     
     
    }
    Ce code fonctionne peu... En fait, dès que je charge un image, il faut que je resize la fenetre pour que l'image s'affiche. Et dès que je veux en charger une autre, l'application plante.

    Est-ce que vous voyez d'où cela peut venir ?

    Merci beaucoup,
    Thom

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    on pourrait avoir l'erreur stp. se serait mieux. merci

  3. #3
    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
    Par défaut
    Ou alors JXImagePanel dans la librairie SwingX.

    Au passage le nom de ta classe est mal choisi : Interface c'est pas top étant donné qu'en minuscules c'est un mot clé. A éviter donc.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 118
    Par défaut
    youpla, voila l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space
    	at java.awt.image.DataBufferInt.<init>(Unknown Source)
    	at java.awt.image.Raster.createPackedRaster(Unknown Source)
    	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
    	at sun.awt.image.ImageRepresentation.createBufferedImage(Unknown Source)
    	at sun.awt.image.ImageRepresentation.setPixels(Unknown Source)
    	at sun.awt.image.ImageDecoder.setPixels(Unknown Source)
    	at sun.awt.image.JPEGImageDecoder.sendPixels(Unknown Source)
    	at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
    	at sun.awt.image.JPEGImageDecoder.produceImage(Unknown Source)
    	at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
    	at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
    	at sun.awt.image.ImageFetcher.run(Unknown Source)

  5. #5
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    hahaha

    tu dois essayé d'afficher une image trop volumineuse.

    java.lang.OutOfMemoryError signifi qu'il n'y a pas assez de memoire alloué a ton application. Donc soit l'image que tu charges est trop volumineuse soit quelque chose te prend beaucoup de memoire autrepart.

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 118
    Par défaut
    oui c'était ça ! l'image trop grosse...

    j'ai une autre question:
    pourquoi il faut que je grossisse la fenetre (ou reduire en faite) pour que l'image s'affiche ? Après quand je selectionne une autre image, il n'y a plus ce problème.

    merci :-)

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/09/2008, 17h13
  2. changer la source d'une image avec Firefox
    Par couetbis dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 07/11/2007, 22h45
  3. Changer la source d'une image
    Par maitrebn dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 20/07/2007, 10h20
  4. Réponses: 2
    Dernier message: 04/04/2006, 17h03
  5. changer la dimension d'une image dans un tableau
    Par robocop2776 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/10/2005, 15h20

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