2

ペインを移動すると、javaFx2で、現在のシーンよりも大きい奇妙な動作が発生しました。ペインは、次のようにcssファイルに背景画像を設定しました。

#foo {
    -fx-background-image: url("bar.png");
}

画像は最初は正しくレンダリングされますが、ペインを移動すると(シーン内の別の部分を表示するため)、ペインは白くなり、移動前は表示されなかったため、背景画像が表示されます。

移動コード:

private void moveCameraTo(Point p) {
    TranslateTransition translate = TranslateTransitionBuilder.create()
            .node(pane)
`   `       .toX(someX)
            .toY(someY)
            .duration(DEFAULT_TRANSITION_TIME)
            .build();
    translate.play();
}

これが失敗のイメージです:

http://img204.imageshack.us/img204/4796/renderfail.jpg

境界線をドラッグしてシーンのサイズを変更するとすぐに、背景が正しくレンダリングされます。

ペインの移動中に何か間違ったことをしていますか?たとえば、更新メソッドがない(javaFx2にこれが存在するかどうかは疑わしいですが)、またはペインのメンバーを設定していますか?

4

1 に答える 1

1

何度も検索して試した結果、この動作はバグであるという結論に達しました。

この回避策はScrollPane、プレーンの代わりにを使用し、次のようPaneにvvalueとhvalueをに設定して「カメラ」を移動することです。Timeline

private void moveCameraTo(Point p) {
        KeyValue yVal = new KeyValue(this.scrollPane.vvalueProperty(),
                p.getY(),
                Interpolator.EASE_BOTH);
        KeyValue xVal = new KeyValue(this.scrollPane.hvalueProperty(),
                p.getX(),
                Interpolator.EASE_BOTH);
        Timeline yTimeline = TimelineBuilder.create().autoReverse(false)
                .keyFrames(new KeyFrame(DEFAULT_TRANSITION_TIME, yVal)).build();
        Timeline xTimeline = TimelineBuilder.create().autoReverse(false)
                .keyFrames(new KeyFrame(DEFAULT_TRANSITION_TIME, xVal)).build();

        yTimeline.play();
        xTimeline.play();
    }

これが同じ問題を抱えているすべての人に役立つことを願っています。誰かがより良い解決策を手に入れたら、それを投稿してください!

于 2013-01-10T17:23:41.827 に答える