2012-08-30 123 views
27

如何隱藏HBox中的項目,並將此項目使用的空間用於其他項目。JavaFX HBox隱藏項目

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

在上面的代碼中,我希望圖表節點在隱藏圖例窗格時使用所有可用空間。

回答

57

調用legendPane.setVisible之前,請致電:

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

Node.managed屬性防止場景中的節點影響其他場景節點的佈局。

+2

這似乎更直接,添加/刪除節點。 –

7

可以暫時從場景中刪除:

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

或操縱它的大小:

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

     } 
    } 
});