3

垂直スクロールバーのみで 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();
        }
    });

次に、ListView を反復処理し、ListItem が値として FlowPane を持っている場合は高さを更新します

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

しかし、バグが1つあります。ときどき flowPane.getHeight() が間違った値を返す - 例外よりも小さい

4

0 に答える 0