Java 使用FlowLayout将JPanel添加到JFrame

Java 使用FlowLayout将JPanel添加到JFrame,java,swing,jframe,jpanel,flowlayout,Java,Swing,Jframe,Jpanel,Flowlayout,我试图使用JPanel的子类在屏幕上显示一个填充的椭圆形 当我尝试将此子类的对象添加到带有FlowLayout的JFrame时,椭圆没有正确显示,我不知道问题出在哪里。你能帮我吗 这是我的密码 @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.BLACK); g.fillOval(0, 0, 50, 50); } 大体上

我试图使用JPanel的子类在屏幕上显示一个填充的椭圆形 当我尝试将此子类的对象添加到带有FlowLayout的JFrame时,椭圆没有正确显示,我不知道问题出在哪里。你能帮我吗

这是我的密码

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.BLACK);
    g.fillOval(0, 0, 50, 50);
}

大体上

    JFrame frame = new JFrame("Ball");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300,300);
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
    frame.setLayout(new FlowLayout());
    BallPanel ball = new BallPane();
    frame.add(ball);

创建任何自定义组件并进行自定义绘制时,需要重写
getPreferredSize()
方法以返回自定义组件的大小。理想情况下,您还可以覆盖最小/最大尺寸


然后布局管理器可以完成它的工作。

请参阅
FlowLayout的Javadoc

流布局允许每个组件假定其自然(首选)大小

由于您进行了一些自定义绘制,因此
球面板
无法计算其首选尺寸(基于添加到面板中的组件)。因此,在
BallPanel
类中重写
getPreferredSize
方法以返回正确的尺寸(正确表示与自定义绘制匹配)。考虑对<代码> GETMimuMuths和<代码> GeimthMuthSimule 当我必须调试Swing布局问题时,我通常使用的方法是以特定颜色为组件添加边框。通过这种方式,您可以清楚地看到组件在其父容器中的大小,这可能是调试的良好起点。在您的例子中,它将显示一个非常小的面板;-)