我的代码功能正常,并且在我的代码中反复更改方块的颜色,但是当更改时,所有的方块都是相同的颜色。
主程序:
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;
import java.util.Random;
import javax.swing.Timer;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Canvas;
import javax.swing.JPanel;
public class RandomColoredBoxes extends JPanel
{
private Timer timer;
private final static int SLEEP = 110;
public RandomColoredBoxes()
{
setBackground(Color.BLACK);
setVisible(true);
ActionListener paintCaller = new ActionListener(){
public void actionPerformed(ActionEvent event)
{
repaint();
}
};
timer = new Timer(SLEEP, paintCaller);
timer.start();
}
public void paintComponent( Graphics window )
{
super.paintComponent(window);
window.setColor(Color.RED);
window.setFont(new Font("TAHOMA",Font.BOLD,12));
window.drawString("Graphics Lab Lab11k ", 20, 40);
window.drawString("Drawing boxes with nested loops ", 20, 80);
drawBoxes(window);
}
public void drawBoxes(Graphics window)
{
int colorValue1 = (int)(Math.random() * 256);
int colorValue2 = (int)(Math.random() * 256);
int colorValue3 = (int)(Math.random() * 256);
Color random = new Color(colorValue1, colorValue2, colorValue3);
window.setColor(random);
//for loop to to across the x - getWidth() might be useful
for(int x = 30; x <= getWidth()- 30; x+=15){
for(int y = 100; y <= getHeight() - 30; y+= 15){
window.fillRect(x, y, 8, 8);
}
}
//for loop to go down the y - getHeight() might be useful
//draw random colored boxes
}
}
我的图形运行者类:
import javax.swing.JFrame;
public class GraphicsRunnerRandom extends JFrame
{
private static final int WIDTH = 800;
private static final int HEIGHT = 600;
public GraphicsRunnerRandom()
{
super("Graphics Runner");
setSize(WIDTH,HEIGHT);
getContentPane().add(new RandomColoredBoxes());
//getContentPane().add(new RandomColoredBoxes());
setVisible(true);
}
public static void main( String args[] )
{
GraphicsRunnerRandom run = new GraphicsRunnerRandom();
}
}
除了正方形改变之外,其他一切都正常运作
答案 0 :(得分:2)
而不是:
int colorValue1 = (int)(Math.random() * 256);
int colorValue2 = (int)(Math.random() * 256);
int colorValue3 = (int)(Math.random() * 256);
Color random = new Color(colorValue1, colorValue2, colorValue3);
window.setColor(random);
//for loop to to across the x - getWidth() might be useful
for(int x = 30; x <= getWidth()- 30; x+=15){
for(int y = 100; y <= getHeight() - 30; y+= 15){
window.fillRect(x, y, 8, 8);
}
}
试试这个:
//for loop to to across the x - getWidth() might be useful
for(int x = 30; x <= getWidth()- 30; x+=15){
for(int y = 100; y <= getHeight() - 30; y+= 15){
int colorValue1 = (int)(Math.random() * 256);
int colorValue2 = (int)(Math.random() * 256);
int colorValue3 = (int)(Math.random() * 256);
Color random = new Color(colorValue1, colorValue2, colorValue3);
window.setColor(random);
window.fillRect(x, y, 8, 8);
}
}
基本区别在于从循环内部创建新颜色(以及调用window.setColor
) - 每次循环开始时,在绘制框之前,将使用新的随机颜色。 / p>