创建动画JButton Grid java

时间:2015-01-29 18:05:23

标签: java jbutton grid-layout

如何在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();
    }
}

是否有可能做到这样的事情?

1 个答案:

答案 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();