Ist es möglich, ein Akkordeon mit mehr als einem offenen Fenster in JavaFX zu haben?JavaFX Akkordeon mit mehreren offenen Bereichen
Antwort
Nein, ein JavaFX 2.2 Accordion kann immer nur einen offenen Fensterbereich haben.
Ich habe eine Verbesserungsanforderung (JDK-8090554 StackedTitledPanes control) für eine Funktion erstellt, mit der Sie mehr als ein Fenster im Akkordeon gleichzeitig öffnen können, die Funktion wurde jedoch noch nicht implementiert.
In der Zwischenzeit können Sie ein ähnliches Steuerelement ganz einfach selbst erstellen, indem Sie mehrere TitledPane Instanzen erstellen und diese in eine VBox platzieren.
private VBox createStackedTitledPanes() {
final VBox stackedTitledPanes = new VBox();
stackedTitledPanes.getChildren().setAll(
new TitledPane("Pane 1", contentNode1),
new TitledPane("Pane 2", contentNode2),
new TitledPane("Pane 3", contentNode3)
);
((TitledPane) stackedTitledPanes.getChildren().get(0)).setExpanded(true);
return stackedTitledPanes;
}
Bei Bedarf können Sie die VBox
mit Ihren Scheiben in einem ScrollPane wickeln, so dass der Inhalt aller Ihrer erweiterten Scheiben verwendbar sein können, wenn ihre Fläche die verfügbare Fläche überläuft.
Ich habe eine sample solution erstellt (Symbole sind Linkware von: http://www.fasticon.com).
hatte ich verschiedene Anforderungen leicht
- Das Akkordeon entweder erweitert oder verwaltet den Betrachtungsraum für die eingebetteten Ansichten
- Die gesamte Ansicht in eine Bildlaufansicht genommen werden kann
- Jeder Box wird vollständig auf die Größe der gesamten Ansicht erweitert, wenn das Akkordeon eine feste Größe hat, oder es wird auf die Größe des Inhalts erweitert, wenn es sich nicht um eine feste Ansicht handelt.
Obwohl in meinem Fall war ich 2. alle 3 und Test zu erfüllen nicht in der Lage, ich in der Lage war, mit dem folgende Update zu kommen:
1) Verwenden Sie eine ScrollPane, mit einem VBox innen, mit TitledWindows drinnen. 2) Stellen Sie sicher, dass Ihre TitledPanes auf VBox.grow = "SOMETIMES" festgelegt sind. 3) Füge eine VBox als letztes Element hinzu und setze VBox.vgrow = "IMMER" - dies bringt die TitledPanes auf ihre minimale Größe. Jeder andere hat Code-Beispiele zur Verfügung gestellt, wenn Sie fxml verwenden möchten, oder nicht wollen, Java verwenden, um nur die Elemente direkt funktioniert genauso gut mit (erzeugt mit SceneBuilder):
<ScrollPane fitToHeight="true" fitToWidth="true" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<content>
<VBox fx:id="leftVBox" maxHeight="1.7976931348623157E308" prefHeight="200.0" prefWidth="100.0">
<children>
<TitledPane fx:id="titledPanelOne" animated="false" expanded="false" style="-fx-background-color: red;" text="Pane One" VBox.vgrow="SOMETIMES">
<content>
<ListView fx:id="listViewOne" maxHeight="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" />
</content>
</TitledPane>
<TitledPane fx:id="titledPanelTwo" animated="false" expanded="false" style="-fx-background-color: green;" text="Pane Two" VBox.vgrow="SOMETIMES">
<content>
<ListView fx:id="listViewTwo" maxHeight="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" />
</content>
</TitledPane>
<VBox prefHeight="0.0" prefWidth="0.0" VBox.vgrow="ALWAYS" />
</children>
</VBox>
</content>
</ScrollPane>
4) Obwohl dies tut Erhalten Sie gestapelte Boxen, die unabhängig voneinander expandieren/kontrahieren, das behebt nicht das Problem, wo Sie Boxen haben, die nicht richtig an ihren Inhalt anpassen (wenn Sie beispielsweise eine Listenansicht wie im obigen Beispiel eingebettet haben), und Sie müssen also ziemlich lange scrollen, wenn noch genug Bildschirmfläche vorhanden ist. Die Lösung? Ein bisschen Java ist erforderlich.
dieses Update implementieren wir die TitledPane ersten binden maxHeightProperty()
an den heightProperty()
des äußeren VBox:
public class Controller implements Initializable {
//... controller code
@Override
public void initialize(URL location, ResourceBundle resources) {
//...
variablesViewPane.maxHeightProperty().bind(leftVBox.heightProperty());
historyViewPane.maxHeightProperty().bind(leftVBox.heightProperty());
}
}
Die wir an jede Scheibe des binden expandedProperty()
und binden und lösen dynamisch die prefHeighProperty()
:
private static void bindExpanded(TitledPane pane, ReadOnlyDoubleProperty prop) {
pane.expandedProperty().addListener((observable, oldValue, newValue) -> {
if(newValue) {
pane.prefHeightProperty().bind(prop);
} else {
pane.prefHeightProperty().unbind();
pane.prefHeightProperty().set(0);
}
});
}
Wenn wir angezeigt werden, bitten wir, so groß wie die VBox zu sein, wenn wir es sind nicht gezeigt, bitten wir, so klein wie möglich zu sein. Der Vorteil dieser Vorgehensweise besteht darin, dass das Layout dann automatisch die verfügbare Höhe basierend auf der Anzahl der aktuell angezeigten Titelbereiche berechnet - was genau zu dem von uns gewünschten Verhalten führt.
Ich gehe mehr ins Detail hier:
- 1. Login NPM mit mehreren Bereichen
- 2. Wechsel zwischen den Bereichen in JavaFX
- 3. Abfrage in Elasticsearch mit mehreren Bereichen auf mehreren Terminen
- 4. Verhindern, dass ein Akkordeon in JavaFX kollabiert
- 5. Twitter Bootstrap: Hinzufügen einer Klasse zum offenen Akkordeon Titel
- 6. SSRS Avg Funktion in mehreren Bereichen
- 7. MVC Routing mit verschiedenen Bereichen mit mehreren Controllern
- 8. Summe basierend auf mehreren Bereichen in SSRS
- 9. JavaFx TabPane mit mehreren Zeilen von Tabs
- 10. Mit offenen Fenster
- 11. Problem mit offenen jpa
- 12. MVC controller.Execute mit Bereichen
- 13. Wählen Sie Zeilen, in denen id in mehreren Bereichen ist
- 14. Dolch2: Komponente kann nicht von mehreren Bereichen abhängig sein
- 15. Akkordeon (ng2-Akkordeon) in angular2
- 16. Akkordeon mit Angular
- 17. Bootstrap Akkordeon mit Pfeilen
- 18. Dropdown öffnet mit Akkordeon
- 19. Vertikal-Akkordeon mit Vaadin
- 20. CSS: Toggle Akkordeon Panel?
- 21. Wie man JavaFX Menüeintrag mit mehreren Szenen verwendet
- 22. Machen Sie ein Slider-Steuerelement mit mehreren Knoten in JavaFX
- 23. JavaFX 1 FXML-Datei mit mehreren verschiedenen Controllern?
- 24. Schienen, Probleme mit den Bereichen
- 25. Bild mit vier anklickbaren Bereichen
- 26. mit überlappenden Bereichen in dtype
- 27. Gnuplot: Polardiagramm mit variablen Bereichen
- 28. Modul Name Bereichen in Routing
- 29. Zurb Foundation Akkordeon im Akkordeon verschachtelt
- 30. Umgang mit Diagrammserien mit inkompatiblen Bereichen?
Hallo, vielen Dank für Ihre Probe. Es wird für mich ganz gut funktionieren. – sight
Feature Request Link funktioniert nicht mehr. –
Ja, das JavaFX-spezifische Jira-Problemverfolgungssystem wurde eingestellt. Soweit ich weiß, wurden die Probleme und Feature Requests von diesem System auf das offizielle JDK-Problemverfolgungssystem übertragen, aber ich weiß nicht, wie ich das zugehörige Problem in diesem System finden oder verlinken kann. Anstatt den offiziellen JDK-Featureanforderungsvorgang für dieses Steuerelement auszuführen, rate ich Ihnen, sich an die Entwickler von [Drittanbieter-ControlsFX-Bibliothek] (http://fxexperience.com/controlsfx/) zu wenden, um zu erfahren, ob sie ein StackedTitledPanes-Steuerelement hinzufügen möchten ihre Bibliothek. – jewelsea