JavaFX - सेटविजियम तत्व को छुपाता है लेकिन आसन्न नोड्स को पुनर्व्यवस्थित नहीं करता है


86

जावाएफएक्स में, अगर मेरे पास 2 VBoxतत्वों के साथ एक दृश्य है और प्रत्येक में VBoxइसमें कई Labelहैं।
यदि मैं शीर्ष VBoxको अदृश्य पर सेट करता हूं , तो नीचे का दृश्य VBox ऊपर क्यों नहीं जाता है जहां शीर्ष VBoxथा?

VBoxहै अदृश्य लेकिन मैं अन्य वस्तुओं अपनी जगह में ले जाने की उम्मीद करेंगे।

मैं अपने नियंत्रणों को लोड करने के लिए FXML का उपयोग कर रहा हूं।


2
क्योंकि पहला VBoxसिर्फ अदृश्य है और removedअपने माता-पिता से नहीं।
इटाचीचुहा

1
चाहे छिपी हुई नोड्स किसी भी स्थान को लेती हों या नहीं, आमतौर पर लेआउट का निर्णय होता है
क्लेओपेट्रा

जवाबों:


168

Node.setVisible(boolean)सिर्फ दृश्यता की अवस्था को दर्शाता है Node

Nodeअपने माता-पिता लेआउट गणना से बाहर करने के लिए आपको अतिरिक्त रूप से कॉल करके, इसकी प्रबंधित स्थिति सेट करनी होगी Node.setManaged(false)

यदि आप चाहते हैं कि प्रबंधित स्थिति दृश्यता के साथ स्वचालित रूप से अपडेट हो जाए, तो आप @jewelsea के रूप में एक बाइंडिंग का उपयोग कर सकते हैं: node.managedProperty().bind(node.visibleProperty());


50
एक बाइंडिंग भी काम करती है , जैसेnode.managedProperty().bind(node.visibleProperty());
आभूषण

7

चूंकि यह अदृश्य है, यह शीर्ष पर नहीं जाएगा। आपको इसे कुछ इस तरह से निकालना होगा:

// remove
vbox.getChildren().remove(...)

एक बार जब आप उस तत्व को हटा देते हैं जिसे आप अदृश्य चाहते हैं, तो दूसरे तत्व को शीर्ष पर जाना चाहिए।


3
AFAIK, दृश्य ग्राफ में हेरफेर करना झूठे को दृश्यमान स्थापित करने से अधिक महंगा है।
पूस

3

Vbox को छुपाने के बजाय आपको इसे बच्चों से हटाना चाहिए और यदि आप इसे दिखाना चाहते हैं तो फिर से vbox को फिर से जोड़ें


1

कोशिश करें कि सेटविज़ुअल और मैनेजप्रोपरेटी का एक साथ उपयोग करें। यहाँ एक उदाहरण है:

myHBox.setVisible(false);
myHBox.managedProperty().bind(myHBox.visibleProperty());

1
सबसे ऊपर उठने के साथ जवाब की तुलना में कुछ भी नया नहीं है , :) :)
kleopatra

0

यदि l किसी नोड को छिपाना और अनहाइड करना चाहते हैं, तो यदि मैं इसे छुपाना चाहता हूं, तो मैं नोड को 0 का आकार देता हूं। इस तरह, नोड अंतरिक्ष पर कब्जा नहीं करेगा क्योंकि उपयोगकर्ता को दिखाई नहीं दे रहा है, इसलिए जब एल यह दिखाई देना चाहता है, तो एल दिखाई देने के लिए फिर से आकार समायोजित करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.