2012-08-30 14 views
27

Come nascondere un elemento in HBox e reso lo spazio utilizzato da questo elemento disponibile per altri elementi.JavaFX HBox nascondi oggetto

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); 

Nel codice precedente che voglio il nodo grafico per utilizzare tutto lo spazio disponibile quando il riquadro leggenda è nascosta.

risposta

57

Prima di chiamare legendPane.setVisible, chiamare:

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

La proprietà Node.managed impedisce a un nodo di una scena di influenzare il layout di altri nodi di scena.

+2

Sembra più diretto aggiungere/rimuovere il nodo. –

7

È possibile rimuovere temporaneamente dalla scena:

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); 
     } 
    } 
}); 

o manipolare le sue dimensioni:

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); 

     } 
    } 
});