调整大小时更改TreeItem高度

时间:2012-04-19 17:06:36

标签: javafx-2

我想创建只有垂直滚动条的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()返回错误的值 - 小于例外

0 个答案:

没有答案