如何在gridlayout
上执行类似的下拉动画?
我试图用swing lib进行Connect 4游戏。
为什么这不起作用?
private class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
JButton bottone = event.getSource();
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 7; j++) {
if (bottone == Grid[i][j]) {
animation(i, j);
Grid[i][j].setBackground(new Color.RED);
Grid[i][j].setEnabled(false);
if (i > 0) {
Grid[(i - 1)][j].setEnabled(true);
}
}
}
}
}
}
private void animation(int row, int column) {
try {
for (int i = 0; i < row; i++) {
Grid[i][column].setBackground(new Color.RED);
revalidate();
repaint();
Thread.sleep(100);
Grid[i][column].setBackground(new Color.WHITE);
revalidate();
repaint();
}
} catch (Exception e) {
e.printStackTrace();
}
}
是否有可能做到这样的事情?
答案 0 :(得分:0)
不幸的是,在整个方法调用结束之后,revalidate()和repaint()实际上才会被渲染。如果要创建动画,则必须使用某种计时器。以下是不同的SO问题类似how to use a swing timer to start/stop animation
尝试只要计时器正在运行,它应该以60 fps
调用重绘Timer timer;
timer = new Timer(33, new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
// change polygon data
// ...
repaint();
}
});
timer.start();