jScrollPane ne pouvez pas ajouter de composant
J'ai un jScrollPane
et un bouton sur un formulaire. Le bouton permet d'ajouter un composant à l' jScrollPane
. Je suis à l'aide d'un FlowLayout
avec un alignement au centre pour organiser les composants à l'intérieur de la jScrollPane
.
La première composante n'a pas de problèmes apparaissant et est parfaitement alignés. Quand je puis appuyez sur le bouton encore une fois, rien ne semble trop arriver. Quand j'ai suivi le débogueur, il montre que tout se passe exactement comme avant.
Le code qui est exécuté lorsque le bouton est cliqué:
jScrollPane.getViewport().add(new Component());
C'est de cette façon que je peux configurer le FlowLayout
sur le Viewport
de la jScrollPane
:
jScrollPane.getViewport().setLayout(new FlowLayout(FlowLayout.CENTER));
1) "Le bouton permet d'ajouter un composant à l'
jScrollPane
." a) Il est JScrollPane
(notez la majuscule J
) b) Pourquoi le faire sur le bouton cliquez sur plutôt que lorsque l'interface utilisateur est créé? Qu'est-ce que les cas d'utilisation pour modifier l'interface ici? 2) Sur jScrollPane.getViewport().add(new Component());
Ne pas ajouter de l'AWT à base de composants d'Interfaces graphiques Swing sans une bonne raison. Pour les tests d'ajouter un "réaliste" - un défaut JTree
est livré avec quelques données. 3) Pour mieux aider plus tôt, après une SSCCE.OriginalL'auteur Feanaro | 2013-01-04
Vous devez vous connecter pour publier un commentaire.
Vous êtes de mélange poids lourd (AWT) composants avec un poids léger (Swing) des composants, c'est déconseillé car ils n'ont pas tendance à bien jouer ensemble.
JScrollPane
contient unJViewPort
sur laquelle vous pouvez ajouter un composant enfant, AKA la vue.(image de la La documentation javadoc)
Donc, l'appel
jScrollPane.getViewport().setLayout(new FlowLayout(FlowLayout.CENTER));
est en fait le réglage de laJViewPort
's layout manager, qui n'est vraiment pas conseillé.Ce que vous devez faire est de créer le composant que vous souhaitez ajouter le composant scrollpane, définir la mise en page et ajoutez tous les enfants de composants, puis l'ajouter à la faire défiler le volet. Vous pouvez ajouter des composants à la "vue" à plus tard si vous le voulez, mais c'est à vous...
Maintenant, vous pouvez ajouter de nouveaux composants de la vue que vous avez besoin...
Si vous ne souhaitez pas conserver une référence à
view
, vous pouvez y accéder en composantJViewport#getView
qui sera de retour le composant été géré par le port de la vue.Exemple De Travail
Cela fonctionne très bien pour moi...
nb - j'ai ajouté
view.validate()
de mon code, que vous ne pouvez pas avoir eu, après, j'ai ajouté un nouvel élément...JScrollPane
avec unJPanel
comme unview
et fait le reste précisément comme vous l'avez suggéré. Code sur le bouton de l'événement:((JPanel)JScrollPane.getViewport().getView()).add(new JComponent());
Code de l'instanciation:JScrollPane = new javax.swing.JScrollPane(new JPanel(new FlowLayout(FlowLayout.CENTER)));
J'ai ajouté un exemple de travail
Merci beaucoup! Il était en effet le
validate()
qui a fait le tour. Juste une question, j'ai vu que lorsque les composants sur leview
dépassé leview
je ne pouvais pas les faire défiler. Ai-je configurer leJScrollPane
à tort?Vous pouvez essayer de revalider au lieu de valider
OriginalL'auteur MadProgrammer