2010-10-30 4 views
0

Ce que j'essaie de faire est de modifier dynamiquement un panneau et de le lire dans la mise en page (Bordure). Le panneau contient des champs de texte et je souhaite que l'utilisateur puisse ajouter ou supprimer des champs de texte dans le panneau. Ce que j'ai essayé est le suivant: enlever le panneau de la disposition, ajouter un autre champ de texte au panneau, lire le panneau à la disposition. Cependant, cela ne fonctionne pas (rien ne se passe, seul le panneau a été supprimé mais pas lu avec le nouveau champ de texte, donc la zone était vide). Même lorsque j'ai supprimé le panneau de la mise en page puis ajouté un autre composant à la mise en page à cette position (BorderLayout.EAST) à la place; rien n'est arrivé (juste vide).Le panneau de préparation à la mise en page après l'édition du panneau?

Ceci est la partie du code qui ne fonctionne pas:

vfields[blocks] = new TextField("0"); //add new textfield to the array of textfields 
blocks += 1; 
dp.blocks = blocks; 
this.remove(values_fields); //remove the values_fields panel from the borderlayout 
values_fields.add(vfields[blocks]); //add new component,textfield to the panel 
this.add(values_fields, BorderLayout.EAST); //readd the panel to the border layout<-- doesn't work 

J'espère que quelqu'un peut me aider. Je suis relativement nouveau à Java donc je pourrais juste faire quelque chose de totalement faux ou quelque chose, mais je ne le vois pas moi-même.

Merci d'avance!

Skyfe.

Répondre

0

Il n'y a pas besoin d'enlever le panneau entier. Vous pouvez simplement supprimer/ajouter des composants au panneau existant. Sur une interface graphique visible l'ordre du code serait:

panel.remove(...); 
panel.add(...); 
panel.revalidate(); 
panel.repaint(); 

Si vous avez besoin de plus d'aide après votre SSCCE.

+0

Salut, je l'ai essayé et cela a fonctionné pour enlever des composants du panneau. Cependant, lorsque j'essaie d'ajouter des composants au panneau de manière dynamique, cela ne fonctionne pas. Works: \t \t \t \t \t \t values_fields.remove (vfields [blocs-1]); \t \t \t \t \t values_fields.validate(); \t \t \t \t \t values_fields.repaint(); Ne fonctionne pas: \t \t \t \t \t valeurs_fields.add (vfields [blocs]); \t \t \t \t \t values_fields.validate(); \t \t \t \t \t values_fields.repaint(); – Skyfe

+0

Mise à jour: il me semble obtenir une exception Java NullPointerException sur la partie où j'utilise la méthode add: values_fields.add (vfields [blocks]). Qu'est-ce qui ne va pas? – Skyfe

+0

Si cela ne fonctionne pas lorsque vous ajoutez des composants, c'est probablement parce que vous utilisez un gestionnaire de disposition qui vous oblige à spécifier des contraintes. Cela arrivera par exemple lorsque vous utilisez un IDE pour créer votre formulaire. La plupart des IDE utilisent le GroupLayout qui vous oblige à spécifier plusieurs contraintes. Mon conseil est de vider l'IDE et de coder les formulaires vous-même afin de savoir comment ajouter des composants et comment spécifier la contrainte requise. – camickr

0

Il semble qu'il ne soit pas repeint. Avez-vous essayé d'appeler les deux méthodes suivantes après les modifications de l'interface graphique:

validate(); 
    repaint(); 
+0

Oui, lorsque j'appelle ces méthodes après les changements de l'interface graphique, il ne montre toujours rien. C'est comme si elle ne supprimait que le panneau value_fields de la bordure car il est juste vide à cet endroit. Une idée? – Skyfe

Questions connexes