如何使此JPanel中的像素动态变化?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使此JPanel中的像素动态变化?相关的知识,希望对你有一定的参考价值。

我设计了一个程序,该程序输出1x1矩形(我将从现在开始称其为Pixels),其颜色在红色,绿色和蓝色之间的随机变量之间随机分配。现在,我想更进一步。首先,这是来源:

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); 
        


    




它可以正常工作,并且像我期望的那样工作。这是下一个挑战:如何使它们不断变化?我想要的是,如果相邻像素为蓝色,而不是像素为绿色,然后任何绿色变为红色,红色变为蓝色。我不确定当前的设置是否可行。任何理论至少都会有很大帮助。

旁注:我有一种方法可以将我在注释中标记为“稍微低效”的几行代码最小化为更干净的内部参数。我查找文档已有一段时间,但找不到Random的更多功能。

Entire Code

答案

您可以使用计时器进行更改。例如:使用以下代码修改gui类,请参阅。此计时器每半秒运行一次,并重新绘制jpanel。您可以将500更改为所需的毫秒。它看起来像这样。

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

“在这里输入的图像描述” “在此处输入图片说明”

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);
            

        

    

以上是关于如何使此JPanel中的像素动态变化?的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个子 JPanel(Java Swing)中的输入触发一个子 JPanel 中的操作?

如何从 Jpanel 中的 JTextField 获取值并将其发送到其他 JPanel?

处理 React 中的状态变化

如何使 JPanel 中的组件尽可能伸展?

如何突出显示主 JPanel 中的特定子面板?

如何将 JLabels 动态添加到 JPanel?