如何让这个 JPanel 中的像素动态变化?
How can I make the pixels in this JPanel dynamically change?
我设计了一个程序,输出 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);
}
}
}
}
它工作正常,而且工作方式与我预期的一样。这是下一个挑战:如何让它们不断变化?我想要的是,如果相邻像素是蓝色,则该像素是绿色,然后任何绿色到红色和红色到蓝色。我不确定目前的设置是否可行。
旁注:我觉得有一种方法可以将我在评论中标记为“稍微低效”的那几行代码最小化为更清晰的内部参数。我已经查找了一段时间的文档,但找不到 Random 的更多功能用途。
您可以使用定时器来保持变化。
例如:
使用以下代码修改您的 gui class 并查看 .
这个计时器 运行 每半秒重绘 jpanel.you 可以将 500 更改为所需 milisecond.it 看起来像这样。
您不需要每次都创建一个新的随机数。 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);
}
}
}
}
我设计了一个程序,输出 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);
}
}
}
}
它工作正常,而且工作方式与我预期的一样。这是下一个挑战:如何让它们不断变化?我想要的是,如果相邻像素是蓝色,则该像素是绿色,然后任何绿色到红色和红色到蓝色。我不确定目前的设置是否可行。
旁注:我觉得有一种方法可以将我在评论中标记为“稍微低效”的那几行代码最小化为更清晰的内部参数。我已经查找了一段时间的文档,但找不到 Random 的更多功能用途。
您可以使用定时器来保持变化。 例如: 使用以下代码修改您的 gui class 并查看 . 这个计时器 运行 每半秒重绘 jpanel.you 可以将 500 更改为所需 milisecond.it 看起来像这样。
您不需要每次都创建一个新的随机数。 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);
}
}
}
}