用Java创建动画4x4网格

时间:2016-01-12 14:52:09

标签: java swing animation

我需要在Java中创建一个4 x 4的矩形网格,然后我需要这些矩形来改变序列中的颜色。

我以前从未做过任何图形工作,只是控制台中的东西。

我开始做一些研究并创建了一个650 x 650 JFrame来放置矩形。 之后我使用了GridLayout并设法使用window.JButton创建了一个4 x 4网格,这是不正确的。

我将如何创建矩形?使用带有++的循环来为动画计时是否正确?

在stackoverflow和google上搜索时,找不到任何符合我需求的内容。对不起,如果这是一个愚蠢的问题。我是新手,我正在做一个正面的计划。

以下是我希望它看起来如何,每个矩形在一个时间间隔内改变颜色

enter image description here

2 个答案:

答案 0 :(得分:2)

来自@ Eng.Fouad answer(所以给予他信任和赞成他的答案),我做了一些修改,这个例子展示了如何使用Swing Timer每秒从绿色变为颜色红色。我使用简单的JLabel进行演示,将此逻辑带入您拥有的GridLayout

以下是一些有关其外观的屏幕截图:

enter image description here enter image description here enter image description here enter image description here

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Color;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class SimpleTimer extends JFrame
{
    private JLabel label;
    private Timer timer;
    private int counter = 3; // the duration
    private int delay = 1000; // every 1 second
    private static final long serialVersionUID = 1L;
    private Color c = Color.RED;
    private boolean red = true;
    private boolean stop = false;
    int i = counter;

    public SimpleTimer()
    {
        super("Simple Timer");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        label = new JLabel("Wait for " + counter + " sec", JLabel.CENTER);
        JPanel contentPane = (JPanel) getContentPane();
        contentPane.add(label, BorderLayout.CENTER);
        contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        pack();

        timer = new Timer(delay, action);
        timer.setInitialDelay(0);
        timer.start();
        setVisible(true);
    }

    ActionListener action = new ActionListener()
    {   
        @Override
        public void actionPerformed(ActionEvent event)
        {
            if(i == 0)
            {
                timer.stop();
                stop = true;
                i = counter;
                timer = new Timer(delay, action);
                timer.setInitialDelay(0);
                timer.start();
            }
            else
            {
                c = red ? Color.GREEN : Color.RED;
                red = !red;
                label.setBackground(c);
                label.setOpaque(true);
                label.setText("Wait for " + i + " sec");
                i--;
            }
        }
    };

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new SimpleTimer();
            }
        });
    }
}

答案 1 :(得分:0)

您可以使用jLabel,并为其设置背景颜色。你是怎么做到的,你可以在这里阅读:How do I set a JLabel's background color?

然后只使用for循环和Thred.sleep来改变动画中的颜色。