Java Applet随着Paint改变了

时间:2014-11-20 21:52:57

标签: java applet awt

我有一个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);
}

3 个答案:

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