Czy możliwe jest posiadanie akordeonu z więcej niż jednym otwartym panelem w JavaFX?Akordeon JavaFX z wieloma otwartymi szybami
Odpowiedz
Nie, JavaFX 2.2 Accordion może mieć tylko jedno otwarte okienko na raz.
Utworzono żądanie rozszerzenia (JDK-8090554 StackedTitledPanes control) dla funkcji, która pozwala na otworzenie więcej niż jednego panelu na akordeonie naraz, jednak żądanie obiektu nie zostało jeszcze zaimplementowane.
W międzyczasie można łatwo zbudować podobną kontrolę, tworząc wiele instancji TitledPane i umieszczając je w postaci VBox.
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;
}
Jeśli to konieczne, można owinąć VBox
zawierający swoje okienka w ScrollPane, tak że zawartość wszystkich rozbudowanych szyb może być użyteczny, jeśli ich powierzchnia przelewa dostępną powierzchnię.
Utworzono sample solution (ikony są łączem z: http://www.fasticon.com).
miałem nieco inne wymogi
- Akordeon albo rozszerza lub zarządza przestrzeń widok dla osadzonych poglądów
- Cały widok może być umieszczone w widoku przewijania
- Every pole całkowicie rozszerza się do rozmiaru całego widoku, jeśli akordeon ma ustalony rozmiar lub rozszerza się do rozmiaru treści, jeśli nie jest to stały widok.
Chociaż w moim przypadku, nie był w stanie spełnić wszystkie 3. i 2. badania, udało mi się wymyślić następującej poprawki:
1) używać ScrollPane, z VBox wewnątrz, z wewnątrz TitledWindows. 2) Upewnij się, że twoje zestawy TitledPanes są ustawione na VBox.grow = "SOMETIMES". 3) Dodaj VBox jako ostatni element i ustaw VBox.vgrow = "ZAWSZE" - to popycha TitledPanes do ich minimalnego rozmiaru. Wszyscy dostarczył przykłady kodu, jeśli chcesz używać fxml, lub nie chcą korzystać z Java, tylko z wykorzystaniem elementów bezpośrednio działa tak samo dobrze (generowane z 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), chociaż to robi dostaniecie skumulowane pudełka, które rozszerzają/kurczą się niezależnie od siebie, to nie rozwiązuje problemu, w którym znajdują się pola, które nie zmieniają odpowiednio rozmiaru do ich zawartości (jeśli na przykład masz widok listy osadzony jak w powyższym przykładzie), i więc musisz teraz przewinąć trochę, gdy pozostało wiele nieruchomych ekranów. Rozwiązanie? Wymagana jest odrobina Java.
celu realizacji tej poprawki, najpierw wiązało TitledPane na maxHeightProperty()
do zewnętrznej Vbox w heightProperty()
bind
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());
}
}
The że wiąże się każdy panel na expandedProperty()
i dynamicznie i rozpuszczać się 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);
}
});
}
Jeśli zostaliśmy pokazani, prosimy o bycie tak dużym jak VBox, jeśli jesteśmy nie pokazano, prosimy o bycie tak małym, jak to możliwe. Zaletą robienia rzeczy w ten sposób jest to, że układ automatycznie obliczył dostępną wysokość w oparciu o liczbę aktualnie wyświetlanych TitledPanes - co prowadzi do dokładnie takiego zachowania, jakie chcemy.
pójdę do bardziej szczegółowo tutaj:
- 1. Wiązanie JavaFX z wieloma właściwościami
- 2. definicje typu z otwartymi związków
- 3. JavaFX 1 plik FXML z wieloma różnymi kontrolerami?
- 4. Jak radzisz sobie z wieloma otwartymi plikami o tej samej nazwie w VisualStudio?
- 5. Akordeon w Sencha touch
- 6. kątowa IE8 akordeon
- 7. Zrzut ekranu panelu z otwartymi comboboxami
- 8. Akordeon nie zwija się
- 9. Praca z jQuery UI "Akordeon i Droppable"
- 10. JQuery Zagnieżdżona do sortowania Akordeon
- 11. Python Mock - Mocking kilkoma otwartymi
- 12. Usuwanie elementu jQuery Akordeon Pozycja
- 13. jquery alt akordeon nie zamykający
- 14. Pierwsze akordeon kątowa Bootstrap pracować
- 15. Twitter Bootstrap akordeon pełna wysokość
- 16. Jquery akordeon nie zawali domyślnie
- 17. BroadcastReceiver z wieloma filtrami lub wieloma BroadcastReceivers?
- 18. Nielegalna próba skojarzenia kolekcji z dwiema otwartymi sesjami
- 19. Uruchom vim bez vimrc/change vimrc z otwartymi plikami
- 20. Atrybucja bibliotek z otwartymi źródłami w aplikacjach na Androida
- 21. Twitter Bootstrap 100% akordeon wysokości "skok"
- 22. Akordeon jquery Zamknij, a następnie otwórz
- 23. Akordeon JQuery nie działa bez tagów h3.
- 24. Extjs stwórz dynamiczny akordeon za pomocą sklepu
- 25. Przełączanie między otwartymi oknami w Pharo
- 26. jQuery UI: TypeError: $ (...). Akordeon nie jest funkcją
- 27. jQuery akordeon - OnCollapse i OnExpand wydarzenia
- 28. Akordeon kątowy UI z przyciskami w części nagłówkowej
- 29. jQuery UI akordeon z sekcjami zawinięte w div
- 30. Akordeon/składany nie działa z nawigacją ul/li
Cześć, dzięki za próby. To dla mnie zadziała. – sight
Link do funkcji łącza nie działa. –
Tak, system śledzenia problemów Jira dla JavaFX został przerwany. O ile mi wiadomo, problemy i propozycje funkcji z tego systemu zostały przeniesione do oficjalnego systemu śledzenia problemów JDK, ale nie wiem, jak znaleźć lub powiązać związany z tym problem w tym systemie. Zamiast przechodzić przez oficjalny proces żądania funkcji JDK dla tej kontroli, radzę skontaktować się z programistami [trzeciej strony ControlsFX] (http://fxexperience.com/controlsfx/) i sprawdzić, czy mają jakiekolwiek zainteresowanie dodaniem kontrolki StackedTitledPanes do ich biblioteka. – jewelsea