【问题标题】:Adding JPanel to JFrame with FlowLayout使用 FlowLayout 将 JPanel 添加到 JFrame
【发布时间】:2013-04-18 14:32:31
【问题描述】:

我正在尝试使用 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);

【问题讨论】:

    标签: java swing jframe jpanel flowlayout


    【解决方案1】:

    查看FlowLayout的Javadoc:

    流式布局让每个组件呈现其自然(首选)大小

    由于您进行了一些自定义绘画,BallPanel 无法计算其首选大小(基于您添加面板的组件)。因此,在 BallPanel 类中重写 getPreferredSize 方法以返回正确的尺寸(正确意味着匹配您的自定义绘画)。考虑对getMinimumSizegetMaximumSize 执行相同的操作。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多