我有一个applet,唯一的目的是创建一个盒子,每次涂上它都会改变颜色。现在它根本不会改变颜色,它只是创建一个随机的背景颜色来开始并随时涂上它,但我需要它来改变。对我所犯错误的任何帮助都将不胜感激。
import java.applet.*;
import java.awt.*;
import java.util.*;
public class AppletSubClass2 extends Applet {
public void init() {
System.err.println("Hello from AnAppletSubClass.init");
setBackground(color);
}
public void paint(Graphics g) {
System.err.println("Hello from .paint!This time the applet will change colors when painted");
setBackground(new Color(randomNum1, randomNum2, randomNum3));
}
Random rand = new Random();
int randomNum1 = rand.nextInt(251);
int randomNum2 = rand.nextInt(251);
int randomNum3 = rand.nextInt(251);
Color color = new Color(randomNum1, randomNum2, randomNum3);
}
答案 0 :(得分:1)
尝试这个,因为我正在工作:
setBackground(new Color(rand.nextInt(251), rand.nextInt(251), rand.nextInt(251)));
你的小程序不会改变颜色,因为在开始时定义一个随机颜色,每次都画画 使用在begin中声明的相同随机颜色重新绘制。
我希望这可以帮到你
答案 1 :(得分:1)
你基本上打破了油漆链,实际上没有任何东西在画你的背景色......
你可以做点像......
public void paint(Graphics g) {
int randomNum1 = rand.nextInt(251);
int randomNum2 = rand.nextInt(251);
int randomNum3 = rand.nextInt(251);
Color color = new Color(randomNum1, randomNum2, randomNum3);
setBackground(color);
super.paint(g);
}
但是这会设置一个无限循环的重绘请求,最终会消耗你的CPU周期并使你的PC无法使用(更不用说疯狂的闪烁)......
更好的解决方案可能是覆盖getBackgroundColor
方法......
@Override
public Color getBackground() {
int randomNum1 = rand.nextInt(251);
int randomNum2 = rand.nextInt(251);
int randomNum3 = rand.nextInt(251);
Color color = new Color(randomNum1, randomNum2, randomNum3);
return color;
}
这意味着每次调用此方法时,它都会生成随机颜色。然后,您可以使用其他一些进程强制applet重新绘制...
答案 2 :(得分:0)
当您实例化AppletSubClass2对象时,这部分代码只运行一次。
Random rand = new Random();
int randomNum1 = rand.nextInt(251);
int randomNum2 = rand.nextInt(251);
int randomNum3 = rand.nextInt(251);
Color color = new Color(randomNum1, randomNum2, randomNum3);
因此,每次调用repaint()之后都会使用randomNum1,randomNum2和randomNum3的相同值。
您可能想要的是一种在方法中生成随机颜色的方法:
public Color generateRandomColor() {
Random rand = new Random();
int randomNum1 = rand.nextInt(251);
int randomNum2 = rand.nextInt(251);
int randomNum3 = rand.nextInt(251);
return new Color(randomNum1, randomNum2, randomNum3);
}
然后在repaint()中使用它:
public void paint(Graphics g) {
setBackground(generateRandomColor());
}