【问题标题】:Dynamically change the color of a Rectangle in Javafx在 Javafx 中动态更改矩形的颜色
【发布时间】:2013-09-27 06:32:44
【问题描述】:

我在GridPane 中创建两个javafx.scene.shape.Rectangle 对象并执行以下操作。

rectArray = new Rectangle[2];

boardGrid.setStyle("-fx-background-color: #C0C0C0;");

rectArray[0] = new Rectangle(12,12);
rectArray[0].setFill(Color.AQUA);
boardGrid.add(rectArray[0], 2, 0);

rectArray[1] = new Rectangle(12,12);
rectArray[1].setFill(Color.BLACK);
boardGrid.add(rectArray[1], 2, 1);       

Button buttonStart = new Button("Change color");
buttonStart.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
       @Override
       public void handle(MouseEvent event) {
          rectArray[0].setFill(Color.RED);
          try {
               Thread.sleep(2000);
          } 
          catch (InterruptedException e) {
               e.printStackTrace();
          }
          rectArray[1].setFill(Color.AZURE);
       }
});
boardGrid.add(buttonStart, 3, 1);
initializeScene(primaryStage, boardGrid);
...

当我运行代码时,我可以看到两个矩形(一个是 Aqua,一个是黑色),当我单击按钮时,我必须等待 2 秒才能查看两个矩形的颜色变化。

我在调用Thread.sleep(2000) 之前更改了一个矩形的颜色,然后更改了下一个矩形的颜色。

我的问题是我为什么要等待 2 秒?有没有办法可以动态更新矩形的颜色?

【问题讨论】:

    标签: java javafx java-8


    【解决方案1】:

    您正在 UI 线程上休眠,这会阻止任何进一步的处理(包括刷新屏幕)。

    如果您需要延迟某些代码,您可以使用PauseTransition 等待两秒钟,然后使用其onFinished 方法在等待后运行其余代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 2012-11-08
      相关资源
      最近更新 更多