क्या जावाएफएक्स में 1 खुले फलक के साथ एक accordion संभव है?एकाधिक खुले पैन के साथ JavaFX accordion
उत्तर
नहीं, जावाफ़ैक्स 2.2 Accordion में एक समय में केवल एक खुला फलक हो सकता है।
मैंने एक सुविधा के लिए एक वृद्धि अनुरोध (JDK-8090554 StackedTitledPanes control) बनाया है जो आपको एक समय में एक से अधिक फलक खोलने की अनुमति देता है, हालांकि सुविधा अनुरोध वर्तमान में लागू नहीं किया गया है।
इस बीच, आप TitledPane उदाहरणों को बनाकर और 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;
}
आवश्यक हैं, तो आप VBox
एक ScrollPane में अपने शीशे युक्त, ताकि आपके विस्तार शीशे के सभी की सामग्री को प्रयोग करने योग्य है, तो अपने क्षेत्र उपलब्ध क्षेत्र overflows हो सकता है लपेट कर सकते हैं।
मैंने sample solution बनाया (आइकन लिंकवेयर हैं: http://www.fasticon.com)।
मैं थोड़ा अलग आवश्यकताओं
- अकॉर्डियन या तो बढ़ती है या एम्बेडेड विचारों
- पूरे दृश्य एक स्क्रॉल दृश्य
- हर में रखा जा सकता है के लिए दृश्य अंतरिक्ष में सफल हुआ था बॉक्स पूरी तरह से आकार के आकार तक फैलता है, अगर accordion निश्चित आकार है, या यह सामग्री के आकार तक फैलता है, अगर यह निश्चित दृश्य नहीं है। एक VBox साथ
1) एक Scrollpane का उपयोग करें:
मेरे मामले में हालांकि, मैं नहीं 3. और परीक्षण 2. के सभी को पूरा करने में सक्षम है, मैं निम्नलिखित फिक्स साथ आने के लिए सक्षम था था अंदर, TitledWindows के अंदर अंदर। 2) सुनिश्चित करें कि आपके TitledPanes पर सेट हैं VBox.grow = "SOMETIMES"। 3) अंतिम तत्व के रूप में एक VBox जोड़ें और सेट करें VBox.vgrow = "हमेशा" - यह टाइटलडपेन्स को उनके न्यूनतम आकार तक धक्का देता है। अन्य सभी को कोड उदाहरण प्रदान की गई है, तो आप fxml उपयोग करना चाहते हैं, या जावा का उपयोग करने के लिए, बस तत्वों सीधे बस के रूप में अच्छी तरह से (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) हालांकि इस करता है आपको एक दूसरे के स्वतंत्र रूप से विस्तार/अनुबंध करने वाले बक्से मिलते हैं, यह उस समस्या को ठीक नहीं करता है जहां आपके पास ऐसे बॉक्स हैं जो उनकी सामग्री के लिए सही ढंग से आकार नहीं लेते हैं (उदाहरण के लिए आपके ऊपर उपरोक्त उदाहरण में एम्बेड की गई सूची दृश्य है), और इसलिए जब आपको बहुत सारी स्क्रीन रीयल-एस्टेट छोड़ी गई है तो अब आपको बहुत कुछ स्क्रॉल करना होगा। समाधान? जावा का एक बिट आवश्यक है।
यह सुधार लागू करने के लिए, हम पहले बाँध TitledPane के maxHeightProperty()
बाहरी VBox के heightProperty()
रहे हैं:
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());
}
}
हम प्रत्येक फलक के expandedProperty()
करने के लिए बाध्य है, और गतिशील रूप से बाँध और 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);
}
});
}
यदि हमें दिखाया गया है, तो हम वीबीओक्स के रूप में बड़े होने के लिए कहते हैं, अगर हम हैं दिखाया नहीं गया है, हम जितना संभव हो उतना छोटा होने के लिए कहते हैं। इस तरह से काम करने का लाभ यह है कि लेआउट ने स्वचालित रूप से दिखाए गए टाइटलस्पेन की संख्या के आधार पर स्वचालित ऊंचाई की गणना की - जो वास्तव में हमारे इच्छित व्यवहार की ओर जाता है।
मैं यहाँ और अधिक विस्तार में जाने: अपने नमूने के लिए
- 1. गतिशील रूप से एक खुले Accordion
- 2. ज़र्ब फाउंडेशन Accordion Accordion के अंदर Nested
- 3. चेकबॉक्स के साथ jQueryUI accordion
- 4. एंड्रॉइड एवीडी एकाधिक पैन प्रदर्शित नहीं करेगा
- 5. Accordion में jQuery UI Accordion
- 6. Accordion
- 7. d3.js: सीमा के साथ पैन
- 8. Jquery Accordion बंद करें
- 9. JAVAFX चार्ट
- 10. JavaFX
- 11. पैन जेस्चर
- 12. JavaFX: सीएसएस चयनकर्ता के साथ स्टाइलिंग आवेदन
- 13. JavaFean JavaFX गुणों के साथ रैपिंग
- 14. JavaFX
- 15. jQuery UI Accordion सक्रिय
- 16. JavaFX
- 17. clojureql, खुले वैश्विक और परिणामों के साथ
- 18. javafx
- 19. AngularJS/ui-bootstrap accordion -
- 20. JavaFX
- 21. JavaFX
- 22. Winforms accordion
- 23. JavaFX
- 24. JavaFX
- 25. JavaFX
- 26. JavaFX
- 27. Javafx
- 28. Javafx
- 29. JavaFX
- 30. javafx
हाय, धन्यवाद। यह मेरे लिए काफी काम करेगा। – sight
फ़ीचर अनुरोध लिंक अब और काम नहीं करता है। –
हां, जावाएफएक्स विशिष्ट जिरा इश्यू ट्रैकिंग सिस्टम बंद कर दिया गया है। जहां तक मुझे पता है कि उस सिस्टम से मुद्दों और फीचर अनुरोधों को आधिकारिक जेडीके मुद्दे ट्रैकिंग सिस्टम में स्थानांतरित कर दिया गया था, लेकिन मुझे नहीं पता कि उस सिस्टम में संबंधित समस्या को कैसे ढूंढें या लिंक करें। इस नियंत्रण के लिए आधिकारिक जेडीके फीचर अनुरोध प्रक्रिया के माध्यम से जाने के बजाय, मैं [थर्ड पार्टी कंट्रोलएफएक्स लाइब्रेरी] (http://fxexperience.com/controlsfx/) डेवलपर्स से संपर्क करने की सलाह देता हूं और देखता हूं कि क्या उन्हें स्टैक्डटाइटलपेन्स नियंत्रण जोड़ने में कोई रूचि है या नहीं उनकी पुस्तकालय – jewelsea