Comment ajouter dynamiquement des panneaux à d'autres panneaux lors de l'exécution en Java?
Que j'essaie de faire en java à nouveau (il y a quelques années). Je n'ai jamais vraiment fait toute la GUI java. J'ai été à l'aide de Netbeans pour commencer avec ce.
Lors de l'utilisation de winforms en C# au travail, j'ai utiliser un usercontrols de construire des pièces de mon INTERFACE et de les ajouter à des formes de manière dynamique.
J'ai essayé d'utiliser JPanels
comme usercontrols en C#. J'ai créé un JPanel
formulaire appelé BlurbEditor
. Cela a quelques commandes simples. J'essaie de l'ajouter à un autre groupe au moment de l'exécution sur un bouton de l'événement.
Voici le code que j'ai pensé de travail:
mainPanel.add(new BlurbEditor());
mainPanel.revalidate();
//I've also tried all possible combinations of these too
//mainPanel.repaint();
//mainPanel.validate();
Ce n'est malheureusement pas de travail. Ce que je fais mal?
source d'informationauteur BFreeman
Vous devez vous connecter pour publier un commentaire.
J'ai tout compris. Les commentaires sous l'accepté de répondre ici l'expliquer:
Ajouté dynamiquement JTable pas l'affichage de
Fondamentalement, j'ai juste ajouté les informations suivantes avant de la mainPanel.ajouter()
Swing/AWT
composants, en général, ont une mise en page avant d'ajouter des choses à eux - sinon leUI
de ne pas savoir où placer les sous-composants.BFreeman a suggéré
BorderLayout
qui est l'un des plus faciles à utiliser et permet de "coller" les choses d'en haut, en bas, à gauche, à droite ou au centre de la mère.Il en existe d'autres tels que
FlowLayout
qui est comme untextarea
- il ajoute des composants de gauche à droite au dessus de la mère et l'enroule sur une nouvelle ligne lorsqu'elle arrive à la fin.La
GridBagLayout
qui a toujours été connu pour être impossible à comprendre, mais ne vous donner presque tout le contrôle dont vous avez besoin. Un peu comme ceux quiHTML
tables nous avons l'habitude de voir avec des combinaisons bizarres de rowspan, colspan, la largeur et la hauteur des attributs qui ne semblait pas l'air tout à fait la façon dont vous vouliez.mainPanel.add(new BlurbEditor());
mainPanel.validate();
mainPanel.repaint();
Comme avec tous les code swing, n'oubliez pas d'appeler l'interface graphique de mise à jour dans les event dispatch thread. Voir cette pourquoi vous devez faire des mises à jour comme cela
J'avais en face de problème similaire, j'ai voulu changer le panneau figurant sur un panneau de l'exécution
Après quelques tests, de nouveaux essais et beaucoup de la faute de ma pseudo-algorithme est: est-ce
parentPanel : contient le panneau nous voulons supprimer
childPanel : panneau nous voulons commutateur
parentPanelLayout : la mise en page de parentPanel
editParentLayout() : positionne parentPanel avec différents childPanel et de NOUVELLES parentPanelLayout chaque fois
Essayer
mainPanel.invalidate()
et ensuite, si nécessaire,mainPanel.validate()
. Il peut également être utile de vérifier que vous êtes en train de faire tout cela dans le cas de dispatch thread, sinon, vos résultats seront localisées et (généralement) non-déterministe.