JavaFX HBox cache item

Comment puis-je cacher un article dans HBox, et mis l'espace utilisé par cet article à la disposition d'autres articles.

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

dans le code ci-dessus, je veux que le noeud graphique utilise tout l'espace disponible lorsque le volet de légende est caché.

28
demandé sur José 2012-08-30 19:17:40

2 réponses

avant d'appeler legendPane.setVisible, composez le:

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

noeud.géré la propriété empêche un noeud d'une scène d'affecter la disposition des autres noeuds de la scène.

59
répondu jewelsea 2012-08-30 16:29:52

Vous pouvez retirer temporairement de la scène:

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

Ou de manipuler sa taille:

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

        }
    }
});
7
répondu Uluk Biy 2012-08-30 15:57:47