创建动画 JButton Grid java
Create animation JButton Grid java
如何在 gridlayout
上制作类似的下拉动画?
我正在尝试使用 swing 库制作游戏 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();
}
}
是否可以这样做?
不幸的是,直到整个方法调用结束后,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();
如何在 gridlayout
上制作类似的下拉动画?
我正在尝试使用 swing 库制作游戏 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();
}
}
是否可以这样做?
不幸的是,直到整个方法调用结束后,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();