Java 如何在屏幕上绘制多个移动对象

Java 如何在屏幕上绘制多个移动对象,java,swing,graphics,Java,Swing,Graphics,您好,我是java新手,我一直在学习图形,我编写了一个代码,显示一个四处移动的球,我知道如何使它变得简单。但当我试着做多个球的时候,我该怎么做就变得复杂了,有人能解释一下吗? 基本上我想用这个代码来制作多个球,但我不明白怎么做。 这是我到目前为止编写的代码: public class Main { public static void main(String args[]) { Ball b = new Ball(); JFrame f = new

您好,我是java新手,我一直在学习图形,我编写了一个代码,显示一个四处移动的球,我知道如何使它变得简单。但当我试着做多个球的时候,我该怎么做就变得复杂了,有人能解释一下吗? 基本上我想用这个代码来制作多个球,但我不明白怎么做。 这是我到目前为止编写的代码:

public class Main {

    public static void main(String args[]) {
        Ball b = new Ball();


        JFrame f = new JFrame();
        f.setSize(1000, 1000);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        f.add(b);



    }

}

    public class Ball extends JPanel implements ActionListener{

     Timer t = new Timer(5 , this);

    int x = 0, y = 0,speedx = 2, speedy = 2;



    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(Color.CYAN);
        g.fillOval(x, y, 20, 20);
        t.start();
    }

    public void actionPerformed(ActionEvent e) {
        x += speedx;
            y += speedy;
            if(0 > x || x > 950){
                speedx = -speedx;
            }
            if(0 > y || y > 950){
                speedy = -speedy;
            }
           repaint();
    }

 }

paintComponent(…)
方法中永远不要有任何程序逻辑语句。从该方法中去掉计时器的start方法。您无法完全控制何时甚至是否调用该方法


如果您想显示多个球,那么给GUI一个球的ArrayList,然后遍历它们,在paintComponent中绘制它们。在计时器中移动它们。

小心名为
x
y
的变量,它们可能会导致系统的其他部分出现问题,因为
JPanel
实际上有它自己的(私有)变量名为相同的-当人们重写
getX/y
方法时会出现问题,但您应该小心;),;)@这是一个很好的建议,从没想过@MouseEvent喜欢这些问题,除非你注意,否则诊断起来很痛苦:P@joleMola您可能还想退房