[英]JavaFX delay change of color in for loop
我有一個用矩形(4x4)填充的網格窗格,每個矩形都需要更改顏色,並且需要以特定的順序完成,並在它們之間延遲。 該順序由模型在數組中給出。
演示者在for循環中使用數組,然后告訴視圖按索引更改塊的顏色。
我嘗試了很多事情來增加延遲,以使它們不會一次激活所有功能,但是我似乎無法弄清楚。
我的for循環:
int[][] grid = model.getGrid();
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
view.enableRegularBlock(i, j);
}
}
我嘗試過的事情: 時間軸:
public void enableRegularBlock(int i, int j) {
Timeline timeline = new Timeline(new KeyFrame(
Duration.millis(500),
ae -> {
Rectangle r = blockArray[i][j];
r.setFill(activeColor);
startTimer += 500;
}));
timeline.play();
}
這是在for循環內運行的,因為所有矩形都立即被激活,所以無法使用。
線:
int[][] grid = model.getGrid();
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
final int row = i;
final int col = j;
Thread t = new Thread(){
public void run() {
try{
Platform.runLater(new Runnable() {
@Override
public void run() {
view.enableRegularBlock(row, col);
}
});
Thread.sleep(500);
} catch(InterruptedException v){System.out.println(v);}
}
};
t.start();
}
}
這也可以一次激活所有矩形。
有什么方法可以在矩形激活之間添加一個在ui中也可見的延遲嗎? 所以是這樣的:view.enableRegularBlock(0,0)-> delay 500ms-> view.enableRegularBlock(0,1)-> delay 500ms ...
謝謝!
您不得將循環添加到線程/事件處理程序之外。
從循環開始的多個時間軸與多個線程並行運行。
從運行多個周期的Timeline
中激活所有元素:
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(500), new EventHandler<ActionEvent>() {
private int i = 0;
private int j = 0;
@Override
public void handle(ActionEvent event) {
Rectangle r = blockArray[i][j];
r.setFill(activeColor);
j++;
if (j >= blockArray[i].length) {
// "reset" inner loop, next step in outer loop
j = 0;
i++;
}
}
}));
// assuming same size of inner arrays here
timeline.setCycleCount(blockArray.length * blockArray[0].length);
timeline.play();
或使用Thread
:
new Thread(() -> {
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
final Rectangle r = blockArray[i][j];
Platform.runLater(() -> r.setFill(activeColor));
try {
Thread.sleep(500);
} catch(InterruptedException v){System.out.println(v);}
}
}
}).start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.