2013-01-10 51 views
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

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

对此的解决办法是,使用ScrollPane,而不是一个简单的Pane,并通过设置在Timeline的VVALUE和hvalue,像这样移动“相机”:

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

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