Java 如何使JPanel中的像素动态变化?
我设计了一个程序,可以输出1x1矩形(我将从现在起调用像素),颜色在红色、绿色和蓝色之间随机变化。现在我想更进一步。首先,来源如下:Java 如何使JPanel中的像素动态变化?,java,jpanel,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);
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);
}
}
}
}
公共类GUI扩展了JPanel{
私有最终静态int MAX_X=1920;
专用最终静态int MAX_Y=1080;
公共组件(图形g){
超级组件(g);
对于(int x=0;x
它的工作原理和我期望的一样。下一个挑战是:如何让它们不断变化?我想要的是,如果一个相邻的像素是蓝色的,那么这个像素应该是绿色的,然后任何绿色变成红色,红色变成蓝色。我不确定它目前是如何设置的,这将是可能的
旁注:我觉得有一种方法可以将我在注释中标记为“稍微低效”的几行代码最小化为更干净的代码,比如内部参数。我已经查找文档有一段时间了,但是我找不到更实用的Random
您可以使用计时器不断更改。 例如: 使用以下代码修改gui类,请参见。 此计时器每半秒运行一次,然后重新绘制jpanel。您可以将500更改为所需的毫秒。它将如下所示 您不需要每次都创建一个新的随机数。randomnumber.nextInt足够了,您可以将number作为实例
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);
}
}
}
}
公共类GUI扩展了JPanel{
私有最终静态int MAX_X=200;
专用最终静态整数最大值Y=150;
私有最终颜色红色=Color.RED,绿色=Color.GREEN,蓝色=Color.BLUE;
私有最终随机颜色=新随机();
私有整数;
私人色彩;
公共图形用户界面(){
新计时器(1,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
重新油漆();
}
}).start();
}
@凌驾
公共组件(图形g){
超级组件(g);
对于(int x=0;x
您可以延迟调用repaint。计时器请不要通过破坏您的帖子为其他人做更多的工作。通过在Stack Exchange(SE)网络上发布,您已经在a下授予SE分发内容的不可撤销权利(即,无论您未来的选择如何)。根据SE政策,分发非故意破坏版本。因此,任何故意破坏行为都将恢复原状。请参阅:。如果允许删除,在帖子下方左侧有一个“删除”按钮,但它只在浏览器中出现,不是移动应用程序。@Aarix你能澄清一下吗?我没有弄明白it@Aarix你的面板是1920*1080。所以总像素是2073600。所以这个过程很大而且有点慢。如果你使用像200*100这样的小面板,那么它的速度就足够了。无论如何,这不是你想要的吗?