Unterschiede
Hier werden die Unterschiede zwischen der gewählten und der aktuellen Version gezeigt.
javafx:accordion-all-open 2015/03/18 13:01 | javafx:accordion-all-open 2020/01/22 20:59 aktuell | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
[[javafx:javafx|JavaFX]]\\ | [[javafx:javafx|JavaFX]]\\ | ||
====== Accordion, alle offen ====== | ====== Accordion, alle offen ====== | ||
- | Das JavaFX Accordion kann immer nur ein Element zur Zeit öffnen. Mit wenig Aufwand lässt sich ein eignes Accordion entwickeln, bei welchem mehrere/alle Elemente offen sein können:\\ | + | Das JavaFX Accordion kann immer nur ein Element zur Zeit öffnen. Mit wenig Aufwand lässt sich ein eigenes Accordion entwickeln, bei welchem mehrere/alle Elemente offen sein können:\\ |
{{:javafx:accordion-all-open.png|}} | {{:javafx:accordion-all-open.png|}} | ||
\\ | \\ | ||
Zeile 24: | Zeile 24: | ||
</html> | </html> | ||
\\ | \\ | ||
+ | Eine einfache Variante, die auf das Wesentliche beschränkt ist:\\ | ||
<code java> | <code java> | ||
package com.sowas.javawiki.javafx; | package com.sowas.javawiki.javafx; | ||
Zeile 55: | Zeile 56: | ||
} | } | ||
} | } | ||
+ | </code> | ||
+ | \\ | ||
+ | \\ | ||
+ | Eine Accordion-Klasse, die (ein bisschen) kompatibel zur JavaFX-Klasse Accordion ist:\\ | ||
+ | <code java> | ||
+ | package com.sowas.javawiki.javafx; | ||
+ | |||
+ | import javafx.collections.FXCollections; | ||
+ | import javafx.collections.ListChangeListener; | ||
+ | import javafx.collections.ObservableList; | ||
+ | import javafx.scene.control.ScrollPane; | ||
+ | import javafx.scene.control.TitledPane; | ||
+ | import javafx.scene.layout.VBox; | ||
+ | |||
+ | import java.util.List; | ||
+ | |||
+ | public class MultiOpenAccordion extends ScrollPane { | ||
+ | private ObservableList<TitledPane> panes = FXCollections.observableArrayList(); | ||
+ | VBox vBox = new VBox(); | ||
+ | |||
+ | public NavigatorAccordion() { | ||
+ | // Falls keine horizontale Scrollleiste gewünscht ist, muss die Breite der VBox | ||
+ | // and die ScrollPane angepasst werden: | ||
+ | widthProperty().addListener(new ChangeListener<Number>() { | ||
+ | @Override | ||
+ | public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { | ||
+ | vBox.setMinWidth(newValue.doubleValue()); | ||
+ | vBox.setPrefWidth(newValue.doubleValue()); | ||
+ | vBox.setMaxWidth(newValue.doubleValue()); | ||
+ | } | ||
+ | }); | ||
+ | setHbarPolicy(ScrollBarPolicy.NEVER); | ||
+ | |||
+ | // Änderungen an der Liste werden hier behandelt: | ||
+ | panes.addListener((ListChangeListener<TitledPane>) c -> { | ||
+ | while (c.next()) { | ||
+ | if (c.wasAdded()) { | ||
+ | vBox.getChildren().addAll(c.getAddedSubList()); | ||
+ | } | ||
+ | if (c.wasRemoved()) { | ||
+ | vBox.getChildren().removeAll(c.getRemoved()); | ||
+ | } | ||
+ | if (c.wasReplaced()) { | ||
+ | } | ||
+ | if (c.wasUpdated()) { | ||
+ | } | ||
+ | if (c.wasPermutated()) { | ||
+ | } | ||
+ | } | ||
+ | }); | ||
+ | setContent(vBox); | ||
+ | } | ||
+ | |||
+ | public List<TitledPane> getPanes() { | ||
+ | return panes; | ||
+ | } | ||
+ | |||
+ | public void setExpandedPane(TitledPane expandedPane) { | ||
+ | expandedPane.setExpanded(true); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | \\ | ||
+ | Eine Verwendung der Klasse könnte so aussehen:\\ | ||
+ | <code java> | ||
+ | MultiOpenAccordion moAccordion = new MultiOpenAccordion(); | ||
+ | moAccordion.add(new TitledPane("Test 1", new Label("1"))); | ||
+ | moAccordion.add(new TitledPane("Test 2", new Label("2"))); | ||
+ | moAccordion.add(new TitledPane("Test 3", new Label("3"))); | ||
</code> | </code> | ||
\\ | \\ | ||
Zeile 60: | Zeile 130: | ||
Stichworte: | Stichworte: | ||
<code> | <code> | ||
- | JavaFX Accordion, alle offen, Beispiel | + | JavaFX Accordion, alle offen, mehere gleichzeitig offen, Beispiel |
</code> | </code> | ||