Java JPanel仅显示第一个添加的图像

Java JPanel仅显示第一个添加的图像,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我正在尝试为2D游戏制作一个基本的布局,每个人都说将对象添加到JPanel,然后将面板添加到JFrame,但是一次仍然只显示一个对象。这是我的代码 我有一个矩形的point和ball类,但它们都在工作问题是JPanel只显示添加的第一个对象 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.Timer; public class test{ public static

我正在尝试为2D游戏制作一个基本的布局,每个人都说将对象添加到JPanel,然后将面板添加到JFrame,但是一次仍然只显示一个对象。这是我的代码

我有一个矩形的point和ball类,但它们都在工作问题是JPanel只显示添加的第一个对象

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;

public class test{
    public static void main (String[] args) throws InterruptedException {
        JFrame frame = new JFrame("PONG.s'aight");
        JPanel panel = new JPanel(new FlowLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(0,0,800,500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        Ball a = new Ball (100,100,5,5);
        Ball b = new Ball(200,200,15,15);
        panel.add(a);
        panel.add(b);
        frame.getContentPane().add(panel, BorderLayout.CENTER);

        /*if(b.isCollide(paddle)) b.reverse(Direction.x);*/

        while(true){
            if(b.x==770)b.reverse(Direction.x);
            if(b.x==0)b.reverse(Direction.x);
            if(b.y==450)b.reverse(Direction.y);
            if(b.y==0)b.reverse(Direction.y);
            if(b.x==770)a.reverse(Direction.x);
            if(b.x==0)a.reverse(Direction.x);
            if(b.y==450)a.reverse(Direction.y);
            if(b.y==0)a.reverse(Direction.y);
            b.moveGen();
            a.moveGen();
            frame.repaint();
            Thread.sleep(2);
        }
    }
}
正如您所知,while循环是个坏主意,可能会阻止事件调度线程。此外,JPanel正在使用FlowLayout,这意味着您可能对组件的大小和位置所做的任何修改都可以在任何时候被覆盖。这很可能也是你问题的一部分。当您将每个球添加到JPanel时,它的大小和位置由FlowLayout计算。请查看实现您尝试的操作的不同方式,这将为您提供更多控制。你可能还需要看一看