JavaFX-setVisible은 요소를 숨기지 만 인접 노드를 재 배열하지 않습니다.


86

JavaFX에서 2 개의 VBox요소 가있는 장면이 있고 각각 VBox에 여러 요소 가 Label있는 경우.
맨 위 VBox보이지 않게 설정하면 맨 위 가 있던 장면에서 맨 아래 VBox 가 위로 이동 하지 않는 이유 VBox는 무엇입니까?

VBox이다 보이지 않는 하지만 난 다른 물체가 그 자리로 이동하는 기대.

내 컨트롤을로드하기 위해 FXML을 사용하고 있습니다.


2
첫 번째 VBoxremoved부모가 아닌 보이지 않기 때문입니다.
ItachiUchiha

1
여부 숨겨진 노드가 차지 어떤 공간은 일반적으로 레이아웃의 결정이다
클레오 파트라

답변:


168

Node.setVisible(boolean)의 가시성 상태를 전환합니다 Node.

Node부모 레이아웃 계산에서 를 제외하려면 추가로를 호출하여 관리 상태를 설정해야합니다 Node.setManaged(false).

가시성과 함께 관리 상태가 자동으로 업데이트되도록하려면 @jewelsea가 지적한대로 바인딩을 사용할 수 있습니다. node.managedProperty().bind(node.visibleProperty());


50
또한 작품 바인딩 , 예를 들어,node.managedProperty().bind(node.visibleProperty());
jewelsea

7

보이지 않기 때문에 맨 위로 이동하지 않습니다. 다음과 같이 제거해야합니다.

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

보이지 않게하려는 요소를 제거하면 다른 요소가 맨 위로 이동해야합니다.


3
AFAIK, 장면 그래프를 조작하는 것은 visible을 false로 설정하는 것보다 더 비쌉니다.
Puce

3

vbox를 숨기는 대신 Children에서 제거 하고 다시 표시 하려면 vbox를 다시 추가 해야합니다.


1

setVisible과 managedProperty를 함께 사용하십시오. 다음은 그 예입니다.

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

1
아무것도 새로운 기능과 비교하지 대답 :)이 가장 upvotes와
클레오 파트라

0

노드를 숨기고 숨김 해제하려면 숨기려면 노드 크기를 0으로 조정합니다. 이렇게하면 노드가 사용자에게 표시되지 않으므로 공간을 차지하지 않으므로 표시되도록하려면 크기를 다시 조정하여 표시되도록합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.