我想创建只有垂直滚动条的 TreeView,所以如果我减小窗口宽度,内容应该被包装,TreeView 应该增加它们的高度。
我的想法是把 FlowPane - TreeItem 作为一个孩子。
我尝试了这段代码,以非常不同的组合
FlowPane flowPane = new FlowPane();
flowPane.setMaxWidth(Double.MAX_VALUE);
flowPane.setPrefWidth(200.0f);
flowPane.setMinWidth(100.0f);
flowPane.setMaxHeight(Double.MAX_VALUE);
flowPane.getChildren().addAll( /* add many childs which should be wrapped */ );
TreeItem<FlowPane > = new TreeItem<FlowPane>(flowPane);
当我减小宽度时,FlowPane 中的子元素会被包裹,但容器不会增加高度。看起来很挤。
任何想法如何解决它?
如何制作包装内容并在调整大小时增加高度的TreeItem?
更新: 我通过在场景中添加监听器来解决它
scene.widthProperty().addListener( new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number arg2) {
MainController.handleOnResize();
}
});
然后,如果 ListItem 将 FlowPane 作为值,我将遍历 ListView 并更新高度
if (treeItem.getValue() instanceof FlowPane) {
final FlowPane flowPane = (FlowPane) treeItem.getValue();
Task task = new Task<Void>() {
@Override
public Void call() {
int i = 0;
while (flowPane.getHeight() == 0.0) {
if (++i > 2) {
return null;
}
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
}
}
flowPane.setPrefHeight(flowPane.getHeight() + flowPane.getChildren().size() * 0.95);
return null;
}
};
new Thread(task).start();
但是有一个错误。偶尔 flowPane.getHeight() 返回错误值 - 小于异常值