如何让这个JPanel中的像素动态变化?

时间:2015-03-05 01:40:29

标签: java jpanel

我设计了一个程序,输出1x1矩形(我现在称之为像素),其颜色在红色,绿色和蓝色之间的随机变量之间随机化。现在我想更进一步。首先,这里是来源:

public class GUI extends JPanel {
private final static int MAX_X = 1920;
private final static int MAX_Y = 1080;

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    for (int x = 0; x < MAX_X; x++) {
        for (int y = 0; y < MAX_Y; y++) {

            Color randomColor = Color.BLACK; //Black because it wouldn't work uninitialized.

            //Slightly inefficient? 
            int number; Random rColor = new Random();
            number = rColor.nextInt(3);

             if(number == 0){randomColor = Color.RED;}
             else if(number ==1){randomColor = Color.GREEN;}
             else if(number == 2){randomColor = Color.BLUE;}


            g.setColor(randomColor); //Red, Blue, or Green. Depends on if number is 0, 1 or 2.
            g.drawRect(x, y, 1, 1); 
        }


    }

}

}

它有效,它的工作方式与我的预期相符。这是下一个挑战:如何让它们不断变化?我想要的是,如果相邻像素是蓝色而不是像素是绿色,那么任何绿色到红色和红色到蓝色。我不确定它目前是如何设置的,它是可能的。任何理论至少都会有所帮助。

旁注:我觉得有一种方法可以最大限度地减少我在评论中标记的几行代码,因为&#34;稍微低效&#34;像内部参数一样更清洁。我已经查找了一段时间的文档,但我无法找到更多功能用于Random。

Entire Code

1 个答案:

答案 0 :(得分:0)

你可以使用计时器来改变。 例如: 使用以下代码修改您的gui类并查看。 这个计时器每半秒运行一次并重新绘制jpanel.you可以将500改为所需的milisecond.it将会是这样的。

您不需要每次都创建一个新的随机数。 randomnumber.nextInt足够了,你将数字作为实例

enter image description here enter image description here

public class GUI extends JPanel {

    private final static int MAX_X = 200;
    private final static int MAX_Y = 150;
    private final Color RED = Color.RED, GREEN = Color.GREEN, BLUE = Color.BLUE;
    private final Random rColor = new Random();
    private int number;
    private Color randomColor;

    public GUI() {
        new Timer(1, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                repaint();
            }
        }).start();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        for (int x = 0; x < MAX_X; x++) {
            for (int y = 0; y < MAX_Y; y++) {

                number = rColor.nextInt(3);

                if (number == 0) { randomColor = RED;
                } else if (number == 1) { randomColor = GREEN;
                } else if (number == 2) {randomColor = BLUE;
                }

                g.setColor(randomColor);
                g.drawRect(x, y, 1, 1);
            }

        }

    }
}