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> | ||