在移动窗格时,我在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();
}
这是失败的图像:
当我通过拖动边框来调整场景大小时,背景会很快正确渲染。
我在移动窗格时做错了什么,例如缺少更新方法(虽然我怀疑这在javaFx2中是否存在)或设置窗格的成员?
答案 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();
}
我希望这有助于每个人遇到同样的问题。 如果有人有更好的解决方案,请发布!