Java 如何使用数组生成随机圆
我一直在做一个学校作业,老师希望我们在一个JPanel上画7个圆圈并向下移动。一旦圆到达底部,应制作一个新的圆来替换到达JPanel底部的圆。我决定使用一个数组来继续创建随机圆,但我无法让它正常工作。我使用for循环用具有随机半径和颜色的圆填充数组。代码可以编译,但当我运行它时,会出现异常。我很难让阵列正常工作。另一件我不确定的事情是如何画圆,这样它们就可以在JPanel上留出空间 代码Java 如何使用数组生成随机圆,java,swing,jpanel,keylistener,paintcomponent,Java,Swing,Jpanel,Keylistener,Paintcomponent,我一直在做一个学校作业,老师希望我们在一个JPanel上画7个圆圈并向下移动。一旦圆到达底部,应制作一个新的圆来替换到达JPanel底部的圆。我决定使用一个数组来继续创建随机圆,但我无法让它正常工作。我使用for循环用具有随机半径和颜色的圆填充数组。代码可以编译,但当我运行它时,会出现异常。我很难让阵列正常工作。另一件我不确定的事情是如何画圆,这样它们就可以在JPanel上留出空间 代码 import javax.swing.*; import java.awt.*; import java.a
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.Random;
public class keyExample extends JPanel implements ActionListener, KeyListener {
private Circle[] circles = new Circle[7];
Timer t = new Timer(5, this);
//current x and y
double x = 150, y = 200;
double changeX = 0, changeY = 0;
private Circle;
private int circlex = 0, circley = 0; // makes initial starting point of circles 0
private javax.swing.Timer timer2;
public keyExample() {
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
timer2 = new javax.swing.Timer(33, new MoveListener());
timer2.start();
}
public void NewCircle() {
Random colors = new Random();
Color color = new Color(colors.nextInt(256), colors.nextInt(256), colors.nextInt(256));
Random num = new Random();
int radius = num.nextInt(45);
for (int i = 0; i < circles.length; i++) {
circles[i] = new Circle(circlex, circley, radius, color);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLUE);
g2.fill(new Rectangle2D.Double(x, y, 40, 40));
NewCircle();
for (int i = 0; i < circles.length; i++)
circles[i].fill(g);
}
public void actionPerformed(ActionEvent e) {
repaint();
x += changeX;
y += changeY;
changeX = 0;
changeY = 0;
}
public void up() {
if (y != 0) {
changeY = -3.5;
changeX = 0;
}
}
public void down() {
if (y <= 350) {
changeY = 3.5;
changeX = 0;
}
}
public void left() {
if (x >= 0) {
changeX = -3.5;
changeY = 0;
}
}
public void right() {
if (x <= 550) {
changeX = 3.5;
changeY = 0;
}
}
private class MoveListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
repaint();
Random speed = new Random();
int s = speed.nextInt(8);
circle.move(0, s);
}
}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == KeyEvent.VK_UP) {
up();
}
if (code == KeyEvent.VK_DOWN) {
down();
}
if (code == KeyEvent.VK_RIGHT) {
right();
}
if (code == KeyEvent.VK_LEFT) {
left();
}
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
}
您的问题是您试图使用circle变量进行绘制,而您从未为该变量指定有效的引用
一个解决方案是通过circle=new circle…,给它一个有效的引用,但是我要告诉你忽略它,因为你甚至不应该使用变量circle。把它扔掉。你要做的是使用你的圆数组——这就是你应该在你的paintComponent方法中绘制的。在paintComponent内部使用for循环,并在数组中迭代绘制数组中包含的每个圆项。您的问题是,您试图使用圆变量进行绘制,而该变量从未指定有效的引用
一个解决方案是通过circle=new circle…,给它一个有效的引用,但是我要告诉你忽略它,因为你甚至不应该使用变量circle。把它扔掉。你要做的是使用你的圆数组——这就是你应该在你的paintComponent方法中绘制的。在paintComponent内部使用for循环,并在数组中迭代绘制数组中包含的每个圆项。异常是什么?我在代码上方添加了异常。它将继续打印该异常,直到我关闭您尝试在paintComponent中访问的程序。circle为null。在您尝试使用它进行绘制之前,请将其设置为非null。异常是什么?我在代码上方添加了异常。它将继续打印该异常,直到我关闭您尝试在paintComponent中访问的程序。circle为null。在您尝试使用它进行绘制之前,请将其设置为非null。我编辑了代码,以显示我为解决该问题所做的操作。我创建了一个名为NewCircle的新方法,它使用for循环用随机圆填充数组。然后,我在使用paint组件时调用了该方法。现在,我遇到的问题是,把两个圆圈隔开JPanel@user3076906:这是一个新问题,应该是一个新问题。好的,但还有一些事情我不确定。1在JPanel上隔开圆圈。2如何在其中一个圆圈到达屏幕底部时继续创建新圆圈。3如何使所有圆圈移动downwards@user3076906:您应该一次解决一个问题,与其他问题隔离。我编辑了代码以显示我如何解决问题。我创建了一个名为NewCircle的新方法,它使用for循环用随机圆填充数组。然后,我在使用paint组件时调用了该方法。现在,我遇到的问题是,把两个圆圈隔开JPanel@user3076906:这是一个新问题,应该是一个新问题。好的,但还有一些事情我不确定。1在JPanel上隔开圆圈。2如何在其中一个圆圈到达屏幕底部时继续创建新圆圈。3如何使所有圆圈移动downwards@user3076906当前位置你应该解决每个问题,一次一个,与其他问题隔离。