Bonjour,
J'ai une JFrame dans laquelle de nombreux elements sont disposés (JMenu, JMenuItem, etc...).
J'ai mis à disposition une fonctionnalité de sauvegarde de la "configuration" de mon IHM afin d'éviter d'avoir à tout refaire, grâce à la sérialisation.
La sérialisation marche bien et la désérialisation aussi, mais lorsque je veux rafraîchir mon IHM avec l'ancienne config., je n'ai aucun changements (le titre de mon IHM ne change pas et la couleur de mon onglet JTabbedPane aussi...)
Voici ce que je fais :
Serialisation :
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
| @Override
public void actionPerformed(ActionEvent e)
{
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try
{
fos = new FileOutputStream(new File("E:\\config.backup"));
oos = new ObjectOutputStream(fos);
oos.writeObject(myGui);
System.out.println("objet serialise avec succes !");
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
catch (IOException ioe)
{
// TODO Auto-generated catch block
ioe.printStackTrace();
System.out.println("Message = "+ioe.getMessage()+"\n"+ioe.getCause());
}
finally
{
try
{
oos.close();
fos.close();
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
} |
Déserialisation :
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
| @Override
public void actionPerformed(ActionEvent e)
{
FileInputStream fis = null;
ObjectInputStream ois = null;
try
{
fis = new FileInputStream(new File("E:\\config.backup"));
ois = new ObjectInputStream(fis);
System.out.println("AVANT DEserialisation (AVANT chargement), titre appli = "+myGui.getTitle());
myGui.getMainFrame().invalidate();
myGui = (GUI) ois.readObject();
System.out.println("objet DEserialise avec succes !");
myGui.getMainFrame().validate();
myGui.getMainFrame().repaint();
System.out.println("APRES DEserialisation (APRES chargement), titre appli = "+myGui.getTitle());
}
catch (FileNotFoundException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (IOException ioe)
{
// TODO Auto-generated catch block
ioe.printStackTrace();
}
catch (ClassNotFoundException ioe)
{
// TODO Auto-generated catch block
ioe.printStackTrace();
}
finally
{
try
{
ois.close();
fis.close();
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
} |
Je précise que je fais ça dans un controleur car j'éssaie d'utiliser au max. l'architecture M-V-C.
Je précise également que cela ne vient pas de la déserialisation car lorsque j'ajoute :
myGui.setVisible(true); // Mis en fin de déserialisation
la nouvelle fenêtre apparaît nickel et je retrouve bien les bons attributs :
AVANT DEserialisation (AVANT chargement), titre appli = IHM NON SAUVEGARDEE
objet DEserialise avec succes !
APRES DEserialisation (APRES chargement), titre appli = IHM SAUVEGARDEE
Je pense donc que mon problème porte donc dans l'utilisation des méthodes : invalidate(), validate(), revalidate(), paint()...
Merci d'avance pour votre aide
et désolé pour la longueur de mon post
Partager