在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
方法在等待后运行其余代码