2012-10-18 3 views
3

배경/컨텍스트 :자바 FX -/레이아웃에서 부모와 모든 자식을 포함, 제외 동적

나는 부모와 많은 자식 노드 (버튼, TextField의, 레이블 ...)와 같은 HBox의가 있습니다. HBox 수는

내 질문에 다른 컨테이너 (BorderPane/중 VBOX/그리드)의 자식 :

어떻게 동적으로 부모 (HBox의)와 레이아웃의 모든 아이를 제외/제거 할 수 있습니까?

내가 (마이크로 소프트 WPF처럼) 노드에 대한 몇 가지 3 상 특성을 찾고 :

보이는 - 가시와을 축소 레이아웃

에 참여 - 보이지 않고 참여하지 않습니다 레이아웃에

숨겨진이 (뿐만 아니라 그 아이에 적용) - 표시되지 않지만 레이아웃에 참여

http://msdn.microsoft.com/en-us/library/ms590101.aspx

JavaFX는 어떤 옵션을 제공합니까?

내 솔루션 지금까지 :

hBox.setManaged(false);  
  • 에만 HBox의이 작품은, 그 아이는 여전히 존재

root.getChildren() (hBoxTop)를 제거;.

root.getChildren(). add (hBoxTop);

  • 음이 일할 수있는 것처럼,이 .. 보이지만 BorderPane되는 루트의 경우, 예를 들어, 내가 제거하면/추가하고 사용되지 않는 남아 후 HBox의를, 공간을 제거합니다. 이미 requestLayout()을 시도했지만 ID가 thr rrot을 채우지 않습니다. 내가 놓친 게 있니? 이 문제에 대한 올바른 접근 방법입니까?

편집 :

글쎄, 나는이 작업을 얻었다.

동적으로 제거하고이 특정 사건에 대한 추가

에 의해 달성 될 수있다 :

제거 :

root.setTop(null); 

추가 :

root.setTop(hBoxTop); 

것은 내가 (셋톱 호출하지 않았다 null), BorderPane는 여전히 HBox의 스페이스를 예약합니다 (아이를 삭제 한 후에도). en).

IMHO : 부모 컨테이너 고유이므로 매우 좋지 않은 모델입니다. 예를 들어, BorderPane을 VBox로 변경하면 이러한 메서드도 변경해야합니다. VBox의 경우 children 컬렉션 작업을 제거/추가하지만 add를 호출 한 후 HBox가 같은 위치에 나타나도록 인덱스를 기억해야합니다.

답변

1

root.setTop(null)을 사용하는 것은 좋은 생각이 아닙니다. 왜냐하면 BorderPane에만 국한되어 있기 때문입니다.

나는 최고의 솔루션을 사용하는 것입니다 생각 : 당신이 원하는대로

root.getChildren().remove(yourPane); 

및 사용 레이아웃 방법이 다른 아이들을 배치합니다. 하지만 응용 프로그램에서 원하는 동작으로 처음부터 BorderPane을 사용하면 안됩니다.

root.getChildren().clear()을 사용하여 모든 구성 요소를 제거하고 레이아웃에 다르게 추가 할 수 있습니다.

관련 문제