Java 使用 paintcomponent 创建多个球

标签 java swing loops paint oval

我想创建一个在面板上创建 5 个球的方法。有人可以使用 paint 组件方法或创建我自己的 draw 方法帮助我解决这个问题。正如您在下面看到的,我有一个带有 for 循环的绘制组件方法,它将循环 5 并在随机位置创建一个球,但不幸的是只创建了一个球。

import java.awt.*;
import java.util.Random;
import javax.swing.*;

public class AllBalls extends JPanel {
    int Number_Ball=5;
    int x,y;
    Graphics g;
    AllBalls(){
        Random r = new Random();
        x=r.nextInt(320);
        y=r.nextInt(550);
    }
public static JFrame frame;
    public static void main(String[] args) {
        AllBalls a= new AllBalls();
        frame= new JFrame("Bouncing Balls");
        frame.setSize(400,600);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.add(a);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        for(int i=0;i<Number_Ball;i++){
            g.fillOval(x, y, 30, 30);
        }
        repaint();
    }

}

最佳答案

    Random r = new Random();
    x=r.nextInt(320);
    y=r.nextInt(550);

您只能创建一个随机点,而不是 5 个。

如果你想要 5 个随机点,那么你需要创建一个 ArrayList 来存储你的 5 个随机点。像这样的东西:

ArrayList<Point> balls = new ArrayList<Point>(5); // instance variable

AllBalls()
{
    Random r = new Random();

    for (int i = 0; i < 5; i++)
        balls.add( new Point(r.nextInt(320), r.nextInt(550));
}

然后在 paintComponent() 方法中你需要遍历所有的点:

for (Point p: balls)
    g.fillOval(p.x, p.y, 30, 30);

此外,去掉 repaint() 语句。永远不要在绘画方法中调用 repaint(),这会导致无限循环。

关于Java 使用 paintcomponent 创建多个球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31358677/

相关文章:

java - 如何在共享首选项中保存搜索栏拇指位置

java - 将线程类中的字符串值附加到 jtextArea

java - 以图形方式自定义 Nimbus 外观和感觉的工具

java - 如何用不同的值替换相同的字符?

python - 如何从文本文件python打印下一行

java - 从循环中获取值(value)

java - 当你使用 object... 作为参数时,它叫什么?

使用 LibGDX 相对于相机位置的 Java 旋转模型

java - JTable 列名称不打印

loops - 使用批处理文件循环目录名称?