JavaFX HBox隐藏项目

如何隐藏HBox中的项目,并使此项目使用的空间可用于其他项目。

TitledPane legendPane = new TitledPane("Legend", _legend); legendPane.setVisible(false); LineChart chart = new LineChart(_xAxis, _yAxis); HBox hbox = new HBox(5); hbox.getChildren().addAll(legendPane, chart); 

在上面的代码中,我希望图表节点在隐藏图例窗格时使用所有可用空间。

在调用legendPane.setVisible之前,请调用:

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

Node.managed属性可防止Scene中的节点影响其他场景节点的布局。

您可以暂时将其从场景中删除:

 legendPane.visibleProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { if (newValue) { hbox.getChildren().add(legendPane); } else { hbox.getChildren().remove(legendPane); } } }); 

或者操纵它的大小:

 legendPane.visibleProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue 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); } } });