我需要在Java中创建一个4 x 4的矩形网格,然后我需要这些矩形来改变序列中的颜色。
我以前从未做过任何图形工作,只是控制台中的东西。
我开始做一些研究并创建了一个650 x 650 JFrame
来放置矩形。
之后我使用了GridLayout
并设法使用window.JButton
创建了一个4 x 4网格,这是不正确的。
我将如何创建矩形?使用带有++的循环来为动画计时是否正确?
在stackoverflow和google上搜索时,找不到任何符合我需求的内容。对不起,如果这是一个愚蠢的问题。我是新手,我正在做一个正面的计划。
以下是我希望它看起来如何,每个矩形在一个时间间隔内改变颜色
答案 0 :(得分:2)
来自@ Eng.Fouad answer(所以给予他信任和赞成他的答案),我做了一些修改,这个例子展示了如何使用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();
}
});
}
}
答案 1 :(得分:0)
您可以使用jLabel,并为其设置背景颜色。你是怎么做到的,你可以在这里阅读:How do I set a JLabel's background color?
然后只使用for循环和Thred.sleep来改变动画中的颜色。