繁体   English   中英

使用FlowLayout将JPanel添加到JFrame

[英]Adding JPanel to JFrame with FlowLayout

我试图在使用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无法计算其首选大小(基于您添加面板的组件)。 因此,在BallPanel类中覆盖getPreferredSize方法以返回正确的尺寸(正确意味着匹配您的自定义BallPanel )。 考虑对getMinimumSizegetMaximumSize执行相同操作。

当我必须调试Swing布局问题时,我总是使用的是以特定颜色为我的组件添加边框。 这样,您可以清楚地看到组件在其父容器中的大小,这可能是调试的良好起点。 在你的情况下,它会显示一个非常小的面板;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM