jScrollPane hinzufügen Komponente
Ich habe eine jScrollPane
und eine Schaltfläche auf einem Formular. Die Schaltfläche fügt eine Komponente in die jScrollPane
. Ich bin mit einem FlowLayout
mit einer zentrierten Ausrichtung in der Anordnung der Komponenten innerhalb des jScrollPane
.
Die erste Komponente hat keine Probleme, die erscheinen und ist perfekt ausgerichtet. Wenn ich mir dann drücken Sie die Taste erneut, nichts scheint zu passieren. Wenn ich den debugger zeigt es, dass alles, was geschieht, genau wie vorher.
Den code, der ausgeführt wird, wenn die Schaltfläche geklickt wird:
jScrollPane.getViewport().add(new Component());
Dies ist, wie richte ich das FlowLayout
auf die Viewport
des jScrollPane
:
jScrollPane.getViewport().setLayout(new FlowLayout(FlowLayout.CENTER));
1) "Die Schaltfläche fügt eine Komponente in die
jScrollPane
." a) Es ist JScrollPane
(beachten Sie die Hauptstadt J
) b) Warum ist es auf den button klicken, anstatt, wenn die GUI erstellt wird? Was ist der use-case ändern, um die vorhandenen GUI hier? 2) Auf jScrollPane.getViewport().add(new Component());
nicht hinzufügen, AWT-basierte Komponenten zu Swing GUIs ohne einen guten Grund. Zum testen fügen Sie eine "realistische" Komponente - eine Standard - JTree
kommt mit einigen Daten. 3) Für eine bessere Hilfe früher, nach einem SSCCE.InformationsquelleAutor Feanaro | 2013-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie mischen schweres Gewicht (AWT) Komponenten mit geringem Gewicht (Swing) Komponenten ist dies nicht ratsam, da Sie nicht dazu neigen, um gut zusammen zu spielen.
JScrollPane
enthält eineJViewPort
auf, die Sie hinzufügen können, eine Kind-Komponente, auch bekannt als die Ansicht.(Bild aus der JavaDocs)
Also der Aufruf
jScrollPane.getViewport().setLayout(new FlowLayout(FlowLayout.CENTER));
ist eigentlich die Einstellung derJViewPort
's layout-manager, die ist wirklich nicht ratsam.Was Sie tun sollten, erstellen Sie die Komponente, die Sie hinzufügen möchten, aus der der scrollpane-Komponente legen Sie das layout und fügen Sie alle Kind-Komponenten und fügen Sie es anschließend auf die scroll-Bereich. Sie können Komponenten hinzufügen, auf "Ansicht" zu einem späteren Zeitpunkt, wenn Sie wollen, aber das ist bis zu Ihnen...
Nun können Sie neue Komponenten hinzufügen, um die Ansicht, wie Sie Sie brauchen...
Wenn Sie nicht pflegen wollen, ist ein Verweis auf
view
haben, können Sie auf es durch den AufrufJViewport#getView
zurückgeben wird, die Komponente verwaltet worden, von der view-port.Beispiel Arbeiten
Dies funktioniert gut für mich...
nb - habe ich
view.validate()
zu meinem code, die können Sie nicht haben, nachdem ich eine neue Komponente Hinzugefügt...JScrollPane
mit einemJPanel
alsview
und übriges getan, genau wie Sie vorgeschlagen. Code auf dem button-event:((JPanel)JScrollPane.getViewport().getView()).add(new JComponent());
Code auf Instanziierung:JScrollPane = new javax.swing.JScrollPane(new JPanel(new FlowLayout(FlowLayout.CENTER)));
Ich habe ein funktionierendes Beispiel
Ich danke Ihnen sehr! Es war in der Tat die
validate()
das war der trick. Nur eine Frage, sah ich, dass wenn die Komponenten auf derview
überschrittenview
ich konnte nicht scrollen. Habe ich dieJScrollPane
falsch?Sie könnte versuchen Sie es erneut validieren statt validieren
InformationsquelleAutor MadProgrammer