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

经过大量搜索和尝试,我得出结论,这种行为是一个错误。

一种解决方法是,使用 aScrollPane而不是普通Pane的,并通过在 a 中设置 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 回答