Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[Java] Repositionnement JLabel dans JPanel


Invité zzzer
 Share

Messages recommandés

Invité zzzer

Bonjour,

 

 

Je rencontre actuellement un petit probleme quant au positionnement d'objets JLabel sur un JPanel : j'ai un Vector, contenant des objets de type NC (classe contenant un JLabel et un Point, representant les coordonnees).

 

Je place mes JLabel sur le JPanel sans souci, puis, quand j'ai termine, serialize le Vector dans un fichier et quitte l'appliquation.

Le probleme c'est que quand je re-ouvre le fichier, les JLabel sont bien ajoutes au JPanel mais leurs coordonnees ne sont pas du tout respectees : ils sont placees en haut, par defaut.

 

Voici mon code :

 

for (int i=0; i<components.size(); i++) {
rightArea.add(Items.getJLabelNo(i));	  // ajout des JLabel au JPanel
Items.getJLabelNo(i).setLocation(Items.getCoordNo(i));	// repositionnement des JLabel dans le JPanel
}

 

 

 

Quelqu'un a une idee du probleme ?

 

Merci d'avance !

Lien vers le commentaire
Partager sur d’autres sites

Tu "sérialises" le Vector, mais quels objets contient ce vecteur ? Des objets de la classe NC ? Ces objets ont-ils une méthode serialize() qui permet effectivement d'obtenir l'intégralité des données ?

Lien vers le commentaire
Partager sur d’autres sites

Invité zzzer
Tu "sérialises" le Vector, mais quels objets contient ce vecteur ? Des objets de la classe NC ? Ces objets ont-ils une méthode serialize() qui permet effectivement d'obtenir l'intégralité des données ?

 

Oui, des objets de la classe NC. Cette classe implemente serializable, donc pas de souci.

De plus, quand je fais afficher les coordonnees (objet Point) d'un NC, pas de souci, ce sont bien les bonnes !

Lien vers le commentaire
Partager sur d’autres sites

Cette classe implemente serializable, donc pas de souci.
De quelle manière ?

Tu as implémenté readObject(ObjectInputStream in) et writeObject(ObjectOutputStream out) ?

quand je fais afficher les coordonnees d'un NC ce sont bien les bonnes !
Avant ou après sérialisation / désérialisation ?
Lien vers le commentaire
Partager sur d’autres sites

Invité Invité

La classe est

public class NC implements Serializable

.

Et tous ses champs sont Serializable, donc vraiment pas de souci là dessus.

 

La preuve : après déserialization, les coordonnées (ainsi que tous les autres champs) sont corrects !

 

 

Le problème ne vient vraiment pas de la désérialization, mais plutôt, je pense, d'un problème de rafraîchissement (type validate(), revalidate() ou repaint() ; mais j'ai déjà testé tout ça et rien à faire :/)

Lien vers le commentaire
Partager sur d’autres sites

après déserialization, les coordonnées (ainsi que tous les autres champs) sont corrects !
OK. Je n'avais pas compris que ce n'était pas la désérialisation qui causait les problèmes.

Les données sont bien récupérées et les coordonnées sont correctes après désérialisation.

Lorsque tu as vérifié que les données étaient bien récupérées, tu as utilisé les mêmes méthodes que lorsque tu parcours le Vector pour repositionner tes JLabels ?

Pourquoi ajoutes-tu d'abord les JLabels au JPanel pour ensuite les repositionner (c'est peut-être là, la source de ton problème de rafraichissement) ? Fixe d'abord leur position avant de les ajouter au JPanel, pour voir...

Lien vers le commentaire
Partager sur d’autres sites

Invité zzzer
Lorsque tu as vérifié que les données étaient bien récupérées, tu as utilisé les mêmes méthodes que lorsque tu parcours le Vector pour repositionner tes JLabels ?

Pour verifier que les donnees sont bonnes, en gros, je fais un ((NC)Items.get(i)).coord , et ceci marche parfaitement.

 

Pourquoi ajoutes-tu d'abord les JLabels au JPanel pour ensuite les repositionner (c'est peut-être là, la source de ton problème de rafraichissement) ? Fixe d'abord leur position avant de les ajouter au JPanel, pour voir...

Merci pour ce conseil, j'ai essaye, mais ca fait la meme chose :/

Lien vers le commentaire
Partager sur d’autres sites

Invité Invité

Voici un code plus complet, soulevant le meme probleme :

 

 

public class Main
{
public static JPanel jp;
public static JFrame f;
public static Vector components = new Vector<JLabel> ();

public static void main(String[] args)
{
	f = new JFrame();
	f.setExtendedState(JFrame.MAXIMIZED_BOTH);
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	f.setVisible(true);

	components.add(new JLabel("toto"));
	components.add(new JLabel("tata"));
	components.add(new JLabel("tutu"));

	jp = new JPanel();
	jp.setBackground(Color.GREEN);

	for (int i=0; i<components.size(); i++)
	{
		((JLabel)components.get(i)).setLocation(i*50,i*50);
		jp.add((JLabel)components.get(i));
	}
	f.add(jp);
}
}

 

Merci d'avance...

Lien vers le commentaire
Partager sur d’autres sites

Est-ce qu'on pourrait avoir un extrait de code qui permet de réellement reproduire le problème ? Parce que ce code-là fonctionne très bien... Enfin, une fois qu'on a ajouté les imports adéquats...

Lien vers le commentaire
Partager sur d’autres sites

Invité zzzer
Est-ce qu'on pourrait avoir un extrait de code qui permet de réellement reproduire le problème ? Parce que ce code-là fonctionne très bien... Enfin, une fois qu'on a ajouté les imports adéquats...

 

 

Non, il ne marchait pas ! Les objets ne se plaçaient pas aux endroits demandés...

 

Mais j'ai réussi à résoudre le problème en ajoutant un

jp.setLayout(null)

Lien vers le commentaire
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

 Share

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×
×
  • Créer...