我对这个程序的目标是让牛眼颜色来回切换。然而,颜色不切换它会产生新的颜色。当我试图以任何方式重复它时,更紧迫的问题。程序运行时出现的屏幕是空白的,什么都不做。当没有循环时,靶心会出现。
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JPanel;
public class BullSEye extends JPanel
{
public void paintComponent( Graphics g )
{
super.paintComponent( g );
Random rand = new Random();
int top = 2;
int r = rand.nextInt(256);
int b = rand.nextInt(256);
int h = rand.nextInt(256);
int t = rand.nextInt(256);
int u = rand.nextInt(256);
int v = rand.nextInt(256);
Color randomColor = new Color(r, h, b);
Color randColor = new Color(t,u,v);
//sets colors for first bullseye
g.setColor(randomColor);
g.fillOval( 10, 10, 200, 200 );
g.setColor(randColor);
g.fillOval( 35, 35, 150, 150 );
g.setColor(randomColor);
g.fillOval(60, 60, 100, 100);
g.setColor(randColor);
g.fillOval( 85, 85, 50, 50 );
try
{
Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)
}
catch(InterruptedException e)
{
e.printStackTrace();
}
//sets colors for second bullseye
g.setColor(randColor);
g.fillOval( 10, 10, 200, 200 );
g.setColor(randomColor);
g.fillOval( 35, 35, 150, 150 );
g.setColor(randColor);
g.fillOval(60, 60, 100, 100);
g.setColor(randomColor);
g.fillOval( 85, 85, 50, 50 );
//recursive call to repeat the back and forth colors
paintComponent(g);
}
}
import javax.swing.JFrame;
public class BullSEyeTest
{
public static void main( String args[] )
{
BullSEye panel = new BullSEye();
JFrame application = new JFrame();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
application.add( panel );
application.setSize( 230, 250 );
application.setVisible( true );
}
}
答案 0 :(得分:1)
这里有几个问题可能会导致您的问题。
首先,您为颜色生成随机数,这就是为什么每次运行程序时都会得到不同的颜色(没有递归调用)。
如果你每次都想要相同的颜色,你不需要随机数生成器,它们只是常量。
其次,递归不是在Swing中重新呈现UI的正确方法。 Swing提供了一个重复的“重拍”。在JComponent上的方法,通常你会从一个从定时器触发的动作监听器调用该重绘方法,而不是递归地执行。此外,您正在获取无响应的UI,因为您告诉线程要休眠。
希望有助于回答您的问题。查看这篇文章,了解有关如何实现这一目标的更多信息: