JavaFX - setVisible, öğeyi gizler ancak bitişik düğümleri yeniden düzenlemez


86

JavaFX'te, 2 öğeli bir sahnem varsa VBoxve her VBoxbirinde birden çok öğe Labelvarsa.
Tepeye ayarlarsanız VBoxiçin görünmez , neden alt gelmez VBox yukarı taşımak değil üst sahnesini VBoxoldu?

VBoxOlduğu görünmez ama diğer nesneler yerine taşınmak beklenebilir.

Denetimlerimi yüklemek için FXML kullanıyorum.


2
Çünkü ilki VBoxsadece görünmezdir ve removedebeveyninden değildir .
ItachiUchiha

1
Gizli düğümlerin tipik olarak herhangi bir yer
kaplayıp

Yanıtlar:


169

Node.setVisible(boolean)sadece a'nın görünürlük durumunu değiştirir Node.

NodeA'yı üst düzen hesaplamalarından çıkarmak için , ek olarak çağırarak yönetilen durumunu ayarlamanız gerekir Node.setManaged(false).

Yönetilen durumun görünürlükle birlikte otomatik olarak güncellenmesini istiyorsanız, @jewelsea'nin belirttiği gibi bir bağlama kullanabilirsiniz: node.managedProperty().bind(node.visibleProperty());


51
Bir bağlama da işenode.managedProperty().bind(node.visibleProperty());
yarar

7

Görünmez olduğu için tepeye çıkmayacak. Şunun gibi bir şeyle kaldırmanız gerekir:

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

Görünmez olmasını istediğiniz öğeyi kaldırdıktan sonra, diğer öğe en üste taşınmalıdır.


3
AFAIK, sahne grafiğini değiştirmek, görünür olanı yanlış olarak ayarlamaktan daha pahalıdır.
Puce

3

Vbox'ı gizlemek yerine, onu Çocuklardan kaldırmanız ve tekrar göstermek isterseniz vbox'ı tekrar eklemeniz gerekir.


1

SetVisible ve managedProperty'yi birlikte kullanmayı deneyin. İşte bir örnek:

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

1
yeni bir şey ile karşılaştırıldığında cevap :) Var olan en upvotes ile
kleopatra

0

Bir düğümü gizlemek ve göstermek istersem, gizlemek istersem düğümü 0 olarak yeniden boyutlandırırım. Bu şekilde, kullanıcı tarafından görülemediği için düğüm yer kaplamaz, bu yüzden görünür olmasını istediğimde, görünür olması için boyutu yeniden ayarlıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.