Ответ 1
Перед вызовом legendPane.setVisible вызовите:
legendPane.managedProperty().bind(legendPane.visibleProperty());
Свойство Node.managed не позволяет node в сценарии влиять на расположение других узлов сцены.
Как я могу скрыть элемент в 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);
В приведенном выше коде я хочу, чтобы диаграмма node использовала все доступное пространство, когда панель легенд скрыта.
Перед вызовом legendPane.setVisible вызовите:
legendPane.managedProperty().bind(legendPane.visibleProperty());
Свойство Node.managed не позволяет node в сценарии влиять на расположение других узлов сцены.
Вы можете временно удалить его из сцены:
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);
}
}
});