30

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

上記のコードでは、凡例ペインが非表示になっているときに、グラフノードが使用可能なすべてのスペースを使用するようにします。

4

2 に答える 2

63

legendPane.setVisibleを呼び出す前に、次を呼び出します。

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

Node.managedプロパティは、シーン内のノードが他のシーンノードのレイアウトに影響を与えるのを防ぎます。

于 2012-08-30T16:29:52.460 に答える
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);

        }
    }
});
于 2012-08-30T15:57:47.583 に答える