java - 在Javafx中动态改变矩形的颜色

标签 java javafx java-8

我正在 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);
...

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

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

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

最佳答案

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

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

关于java - 在Javafx中动态改变矩形的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18941011/

相关文章:

java - TornadoFX/JavaFX - 根据另一个可观察属性过滤可观察列表

java - 下界通配符会在 javac 中引起问题,但不会在 Eclipse 中引起问题

datetime - 使用 Java 8 到天花板的圆形分钟

java - 为什么带有返回类型的 Java 方法引用与 Consumer 接口(interface)匹配?

java - showDialog 不显示 Android

java - 在 Observer 内部的行中找不到可执行代码 - Android Studio gradle 断点

java - 选择 JFXCombobox 项目并发送到新的 Combobox

java - JavaFX TextField 中是否有多个插入符?

java - 在同一路径上共享静态内容和 mvc Controller

java - 使用 java play 框架的 Integration Express Checkout 问题