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 :

Serialization imageIcon ou JPanel


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Mai 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Mai 2015
    Messages : 34
    Par défaut Serialization imageIcon ou JPanel
    Bonjour tout le monde
    Ma JFrame comporte deux boutons. Les deux boutons comportent une image différente. Quand je clique sur l'un d'eux, le JPanel central prends l'image du JButton.
    Je voudrais savoir s'il est possible sérialiser le panel ou l'imageIcon. Je souhaiterai, si c'est possible, pouvoir fermer ma fenêtre et l'ouvrir avec directement la dernière image qui était sur mon panel.

    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
     
    public class MainFrame extends JFrame implements Serializable {
    	private JButton b1= new JButton((new ImageIcon(((new ImageIcon("Images\\montagne.jpg")).getImage()).getScaledInstance(50, 50, java.awt.Image.SCALE_SMOOTH))));
    	private JButton b2 = new JButton((new ImageIcon(((new ImageIcon("Images\\newyork.jpg")).getImage()).getScaledInstance(50, 50, java.awt.Image.SCALE_SMOOTH))));
    	private ImageIcon montagneIcon = new ImageIcon("Images\\montagne.jpg");
    	private ImageIcon newyorkIcon = new ImageIcon("Images\\newyork.jpg");
    	private JPanel panSouth = new JPanel();
    	private static JPanel panCenter = new JPanel();
     
    	public MainFrame(JPanel panCenter){
    		this.panCenter=panCenter;
    		setSize(350,550);
    		setLocationRelativeTo(null);
     
    		add(panCenter);
     
    		panSouth.add(b1);
    		panSouth.add(b2);
    		add(panSouth, BorderLayout.SOUTH);
     
    		b1.addActionListener(new actionButtons());
    		b2.addActionListener(new actionButtons());
    	}
     
    	class actionButtons implements ActionListener{
    		public void actionPerformed(ActionEvent e) {
    			if(e.getSource()==b1)
    				setFondEcran(montagneIcon);
    			else
    				setFondEcran(newyorkIcon);
    		}
    	}
     
    	public void setFondEcran(ImageIcon image) {
    		panCenter.removeAll(); 
    		panCenter.add(new JLabel(image));
    		panCenter.revalidate(); 
    		panCenter.repaint();
    	}
     
    	public static void main(String[] args) {
    		serializeObject();
    		deSerializeObject();
    	}
     
    	public static void serializeObject() {
    		MainFrame mf = new MainFrame(panCenter);
    		mf.setVisible(true);
     
    		try {
    			ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("serialization.ser"));
    			oos.writeObject(mf);
    			oos.close();
    		}
    		catch (java.io.IOException e) {
    			e.printStackTrace();
    		}
    	}
     
    	public static void deSerializeObject() { 
    		try {
    			ObjectInputStream ois = new ObjectInputStream(new FileInputStream("serialization.ser"));
    			MainFrame mf = (MainFrame) ois.readObject();
    		}
    		catch (java.io.IOException e) {
    			e.printStackTrace();
    		}
    		catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    	}		
     
    }
    Merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Preferences.userNodeForPackage(TaClasse.class).put("imageDeFond","LaValeur"); // pour sauver
    //....
    setFondEcran(new ImageIcon(Preferences.userNodeForPackage(TaClasse.class).get("imageDeFond","Images\\montagne.jpg"))); // pour charger

  3. #3
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Mai 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Mai 2015
    Messages : 34
    Par défaut
    Bonjour,

    merci pour l'aide.

    Comment dois-je faire pour mettre une valeur ici: LaValeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Preferences.userNodeForPackage(TaClasse.class).put("imageDeFond","LaValeur");
    Si je mets le chemin de l'image, ça m'affiche l'image (c'est donc déjà à moitié résolu). Mais comment faire pour mettre soit l'une soit l'autre.

    Et j'ai aussi toujours cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    juin 07, 2015 9:48:47 PM java.util.prefs.WindowsPreferences <init>
    WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
    Est-ce normal?

    Merci

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par maxa88 Voir le message
    Si je mets le chemin de l'image, ça m'affiche l'image (c'est donc déjà à moitié résolu). Mais comment faire pour mettre soit l'une soit l'autre.
    tu le fais quand tu change d'image par exemple.

  5. #5
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Mai 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Mai 2015
    Messages : 34
    Par défaut
    D'accord.
    Dans le cas ou je souhaite demander à quelqu'un de choisir une image seulement par l'interface graphique (pas en pouvant toucher le code), existe-t-il une possibilité?
    Merci

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour choisir l'image que tu désires reprendre au redémarrage de l'application, il faudrait le faire là on choisit l'image, soit ici, n'est-ce-pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class actionButtons implements ActionListener{
    		public void actionPerformed(ActionEvent e) {
    			if(e.getSource()==b1)
    				setFondEcran(montagneIcon);
    			else
    				setFondEcran(newyorkIcon);
    		}
    	}
    Seulement, tu as besoin du chemin du fichier pour le stocker dans la préférence, or, ici, tu manipules des ImageIcon, qui ne permettent pas de récupérer le nom du fichier qui a permis de les créer.

    2 solutions :

    • la propre : faire une classe qui a un attribut chemin (String) et un attribut image (ImageIcon) (voire d'autres) qui représente ton image et te permet de connaitre ses informations à tout moment. Au lieu de transmettre des ImageIcon en paramètre des méthodes, tu passeras des instances de cette classe
    • La bidouille : on peut utiliser l'attirbut description de l'ImageIcon : à la base il est prévu pour y mettre un résumé de ce qu'est l'image,, mais on peut y stocker le chemin, donc le récupérer
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Mai 2015
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Mai 2015
    Messages : 34
    Par défaut
    Merci pour les détails. J'ai réussi à "bidouiller" quelque chose...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	class actionButtons implements ActionListener{
    		public void actionPerformed(ActionEvent e) {
    			if(e.getSource()==b1){
    				setFondEcran(montagneIcon);
    				Preferences.userNodeForPackage(MainFrame.class).put("imageDeFond","Images\\montagne.jpg");
    			}
    			else{
    				setFondEcran(newyorkIcon);
    				Preferences.userNodeForPackage(MainFrame.class).put("imageDeFond","Images\\newyork.jpg");
    			}
    		}
    	}
    surement pas très propre mais ça fonctionne.
    Merci

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

Discussions similaires

  1. Comment diriger un laser (imageIcon) vers le haut d'un JPanel
    Par ville_de_lumiere dans le forum Débuter
    Réponses: 4
    Dernier message: 02/07/2014, 18h06
  2. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 13h14
  3. ImageIcon
    Par mohamed dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 16/12/2003, 15h52
  4. Problème de serialization
    Par bruno270579 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/04/2003, 18h11
  5. JPanel et Border
    Par titoine dans le forum Débuter
    Réponses: 3
    Dernier message: 22/04/2003, 15h58

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