2012-08-30 2 views
27

Jak mogę ukryć przedmiot w HBox, a przestrzeń wykorzystywana przez ten przedmiot jest dostępna dla innych przedmiotów.JavaFX HBox ukryj przedmiot

TitledPane legendPane = new TitledPane("Legend", _legend); 
legendPane.setVisible(false); 
LineChart chart = new LineChart<Number, Number>(_xAxis, _yAxis); 

HBox hbox = new HBox(5); 
hbox.getChildren().addAll(legendPane, chart); 

W powyższym kodzie chcę węzeł wykres, aby wykorzystać całą dostępną przestrzeń, kiedy tafla legenda jest ukryta.

Odpowiedz

57

Przed skontaktowaniem legendPane.setVisible, zadzwoń:

legendPane.managedProperty().bind(legendPane.visibleProperty()); 

własnością Node.managed zapobiega wpływowi węzła w scenie na układ innych węzłów sceny.

+2

Wydaje się, że bardziej bezpośrednie jest dodawanie/usuwanie węzła. –

7

Można tymczasowo usunąć go ze sceny:

legendPane.visibleProperty().addListener(new ChangeListener<Boolean>() { 
    @Override 
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { 
     if (newValue) { 
      hbox.getChildren().add(legendPane); 
     } else { 
      hbox.getChildren().remove(legendPane); 
     } 
    } 
}); 

albo zmieniać jego rozmiar:

legendPane.visibleProperty().addListener(new ChangeListener<Boolean>() { 
    @Override 
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { 
     if (newValue) { 
      legendPane.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
      legendPane.setPrefSize(prefWidth, prefHeight); 
     } else { 
      legendPane.setMaxSize(0, 0); 
      legendPane.setMinSize(0, 0); 

     } 
    } 
});