繁体   English   中英

用Java创建动画4x4网格

[英]Creating an animated 4x4 grid in Java

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

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

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

我将如何创建矩形呢? 用++循环进行动画计时是否正确?

在stackoverflow和google上搜索时,找不到适合我需要的任何东西。 抱歉,这是一个愚蠢的问题。 我是新来的,我正在做一个实习生。

这是我想要的样子,每个矩形在一个时间间隔内更改颜色

在此处输入图片说明

在@ Eng.Fouad 答案中 (我也给他点赞,也赞成他的答案),我进行了一些更改,此示例说明了如何使用Swing Timer ,它每秒钟将颜色从绿色变为红色。 我使用一个简单的JLabel进行演示,将此逻辑带入您拥有的GridLayout中:

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

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

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

您可以使用jLabel,并为其设置背景颜色。 如何做到这一点,可以在这里阅读: 如何设置JLabel的背景颜色?

然后,只需使用for循环和Thred.sleep即可更改动画中的颜色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM