Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javafx中动态更改矩形的颜色_Java_Javafx_Java 8 - Fatal编程技术网

在Javafx中动态更改矩形的颜色

在Javafx中动态更改矩形的颜色,java,javafx,java-8,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); re

我正在
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);
...
rectary=新矩形[2];
boardGrid.setStyle(“-fx背景色:#C0;”);
rectArray[0]=新矩形(12,12);
rectArray[0].setFill(Color.AQUA);
add(rectary[0],2,0);
rectArray[1]=新矩形(12,12);
rectArray[1].setFill(颜色.黑色);
add(rectary[1],2,1);
按钮开始=新按钮(“更改颜色”);
buttonStart.addEventHandler(MouseEvent.MOUSE_单击,新建EventHandler()){
@凌驾
公共无效句柄(MouseeEvent事件){
rectArray[0]。设置填充(颜色为.RED);
试一试{
《睡眠》(2000年);
} 
捕捉(中断异常e){
e、 printStackTrace();
}
rectary[1].setFill(Color.AZURE);
}
});
boardGrid.add(按钮开始,3,1);
初始化(初级阶段,板栅);
...
当我运行代码时,我可以看到两个矩形(一个是浅绿色的,一个是黑色的),当我单击按钮时,我将不得不等待2秒钟来查看两个矩形的颜色变化

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


我的问题是为什么我要等2秒钟?是否有一种方法可以动态更新矩形的颜色?

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


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

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

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