如何在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);
在上面的代码中,我希望图表节点在隐藏图例窗格时使用所有可用空间。
答案 0 :(得分:59)
在调用legendPane.setVisible之前,请调用:
legendPane.managedProperty().bind(legendPane.visibleProperty());
Node.managed属性可防止场景中的节点影响其他场景节点的布局。
答案 1 :(得分: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);
}
}
});