过渡后背景未正确呈现

时间:2013-01-10 12:21:42

标签: java user-interface javafx-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中是否存在)或设置窗格的成员?

1 个答案:

答案 0 :(得分:1)

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

解决方法是,使用ScrollPane代替普通Pane并通过在Timeline中设置vvalue和hvalue来移动“相机”,如下所示:< / p>

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

我希望这有助于每个人遇到同样的问题。 如果有人有更好的解决方案,请发布!