2010-03-12 129 views
1

以下是代码片段。当按下按钮时,我使用for循环更新矩形。这是我最终意图展示数据模型可视化的模型,因为它在for循环内部发生了大量变化。它的作品,但我看到只有一个变化。现在,随着我随机更改宽度,我应该看到大量的更改。看来我对某些基本的东西做出了错误的假设。使用javafx更新场景中的形状使用for循环

代码低于:

 
7 var rec: Rectangle = Rectangle { 

8    x: 10, y: 10 
9    width: 140, height: 90 
10    fill: Color.BLACK 
11   } 
12 
13 Stage { 

14  title: "MyApp" 
15  scene: Scene { 
16   width: 200 
17   height: 200 
18   content: [ 

19    rec, 
20    Button { 
21     text: "Button" 
22     action: function() { 

23      for (i in [1..999]) { 
24       rec.width = 25 + java.lang.Math.random()*50; 
25      } 
26     } 

27    } 
28   ] 
29  } 
30 }

回答

2

它看起来像正在发生的事情是,这些变化发生的如此之快,场景图的更新跟不上,你只是没有看到他们,直到最后更新。

我建议重构如下,它给你稍微更多的控制(你可以更新刷新率,因为你认为合适,以及开始和停止动画,如你所愿)。

var rec: Rectangle = Rectangle { 
      x: 10, y: 10 
      width: 140, height: 90 
      fill: Color.BLACK 
     } 


var timeline = Timeline { 
    repeatCount: 20 
    keyFrames : [ 
     KeyFrame { 
      time : 100ms 
      canSkip : true 
      action: function(): Void { 
       rec.width = 25 + java.lang.Math.random()*50; 
      } 
     } 
    ] 
} 

Stage { 
    title: "MyApp" 
    scene: Scene { 
     width: 200 
     height: 200 
     content: [ 
      rec, 
      Button { 
       text: "Button" 
       action: function() { 
        timeline.playFromStart(); 
       } 
      } 
     ] 
    } 
} 
+0

从技术上讲,它不是的场景图的更新跟不上。这是运行时将合并更新事件的性能。但是,您的时间表解决方案是解决问题的正确答案。 – JimClarke 2010-03-23 01:33:47