创建动画 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();