Подтвердить что ты не робот

JavaFX HBox скрыть элемент

Как я могу скрыть элемент в 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 использовала все доступное пространство, когда панель легенд скрыта.

4b9b3361

Ответ 1

Перед вызовом legendPane.setVisible вызовите:

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

Свойство Node.managed не позволяет node в сценарии влиять на расположение других узлов сцены.

Ответ 2

Вы можете временно удалить его из сцены:

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

        }
    }
});