2013-10-04 7 views
7

के साथ स्केल करता है मैं उन्नत मल्टीमीडिया, वेबव्यूअर और दृश्य प्रभावों का उपयोग करने की संभावना के कारण स्विंग के बजाए एक परियोजना में जावाएफएक्स का उपयोग कर रहा हूं। हालांकि, मैं क्या मैं वेब (http://docs.oracle.com/javafx/2/layout/jfxpub-layout.htm और अन्य) पर क्या मिला से सीखा है है कि JavaFX लेआउट प्रबंधकों माता पिता सामग्री के आकार के आधार के आकार स्केलिंग पर फोकस, जबकि स्विंग पर ध्यान केंद्रित कम से कम Layout पर आधारित माता-पिता के अनुसार सामग्री स्केलिंग।जावाएफएक्स लेआउट जो माता-पिता

अभी मैं कुछ TitledPane बच्चों के साथ Accordion का उपयोग कर रहा हूं। उनमें से एक को GridPane सरल कारण के लिए GridLayout अनुकरण करने का सबसे अच्छा तरीका है (जैसा कि मैंने अपने पिछले प्रश्न से यहां सीखा है: JavaFX layout equivalent to GridLayout)। मैं TitledPane की सामग्री को 2 पंक्तियों और 1 कॉलम में विभाजित करना चाहता हूं, प्रत्येक पंक्ति TitledPane में उपलब्ध स्थान की 50% ऊंचाई (Stage या Scene के साथ स्केलिंग) के साथ, BorderLayout.CENTER के अंदर क्या होगा । इसके लिए, मैंने के साथ setPercentHeight(50) और 1 ColumnConstraint का उपयोग करके एस के साथ जोड़ा है। हालांकि, मैंने देखा है कि सामग्री ग्रिड के साथ ठीक से स्केल कर रही है, लेकिन ग्रिड TitledPane में सभी उपलब्ध स्थान नहीं ले रहा है (क्योंकि जाहिर है कि यह BorderPane के केंद्र की तरह कार्य नहीं करता है)। मैंने माता-पिता के साथ सामग्री स्केल करने के लिए setMaxWidth के साथ भी प्रयास किया है, लेकिन ऐसा लगता है कि यह काम नहीं करता है (जैसा कि यहां बताया गया है: JavaFX: How to make my custom component use all available space from parent layout?)। और यहां तक ​​कि अगर ऐसा होता है, तो क्या मुझे अपने यूआई तत्वों के पेड़ में अधिकतम चौड़ाई को प्रत्येक वंश में सेट करने की आवश्यकता है ताकि उनमें से सभी स्केल हो सकें?

किसी भी तरह से, क्या कोई जानता है कि TitledPane को 2 समान रिक्त स्थान के साथ कैसे बनाया जाए जो शीर्षक वाले आकार के साथ स्केल करते हैं?

column width does not take up all available space

उत्तर

9

वास्तव में, अपने gridpane अपने सभी माता पिता को भरने के लिए बढ़ रहा है। नीचे दिए गए कोड पर विचार करें, मैंने डिबगिंग उद्देश्यों के लिए ग्रिडपेन में पृष्ठभूमि रंग (लाल) जोड़ा है।

Accordion accordion = new Accordion(); 
TitledPane titledPane = new TitledPane(); 
titledPane.setText("Title"); 
GridPane gridPane = new GridPane(); 
gridPane.setStyle("-fx-background-color:red"); 

gridPane.add(new TextArea("Hello"), 0, 0); 
gridPane.add(new TextArea("World"), 0, 1); 

titledPane.setContent(gridPane); 
accordion.getPanes().add(titledPane); 

आप इस कोड को निष्पादित करते हैं, तो gridpane अपने सभी माता-पिता (जाँच लाल रंग सब titledpane सामग्री पर फैला होता है) भर जाएगा।

हालांकि, ग्रिडपेन की सामग्री सभी कॉलम भर नहीं जाएगी। यदि आप विंडो का आकार बदलने का प्रयास करते हैं, तो आप देखेंगे कि ग्रिडपेन के साथ चौड़ाई में textareas बदल नहीं रहे हैं। इसे ठीक करने के लिए, आपको ग्रिडपेन के साथ बढ़ने के लिए ग्रिडपेन के पहले कॉलम को बताना होगा।

ColumnConstraints columnConstraints = new ColumnConstraints(); 
columnConstraints.setFillWidth(true); 
columnConstraints.setHgrow(Priority.ALWAYS); 
gridPane.getColumnConstraints().add(columnConstraints); 
+0

आप मुझे बता सकते हैं क्या अंतर setPercentWidth (100) और setFillWidth (सही) + setHgrow (Priority.ALWAYS) के बीच है: तरीका है कि ऐसा करने के लिए निम्नलिखित बाधा जोड़ने के लिए है? – Warkst

+1

setPercentWidth setHGrow (Priority.ALWAYS) के बजाय भी काम करेगा। यदि आप केवल एक कॉलम का उपयोग कर रहे हैं तो वे दोनों एक ही काम करेंगे। यदि आपके पास एकाधिक कॉलम हैं, तो वे अलग-अलग काम करेंगे। चूंकि setHGrow लेआउट को बताने का प्रयास करेगा क्योंकि ग्रिडपेन के कॉलम को अनधिकृत उपलब्ध स्थान को भरने के लिए बढ़ने की आवश्यकता है। – Rasha

+1

setFillWidth (सत्य) कॉलम की सामग्री के लिए है, न कि कॉलम स्वयं। डिफ़ॉल्ट मुझे लगता है कि सच है। तो आपको इसे सेट करने की आवश्यकता नहीं है। इसका अर्थ यह है कि कॉलम के बच्चों को कॉलम की सभी चौड़ाई को भरने के लिए समायोजित किया जाएगा या नहीं। – Rasha

संबंधित मुद्दे