java - 使用 FlowLayout 将 JPanel 添加到 JFrame

标签 java swing jframe jpanel flowlayout

我正在尝试使用 JPanel 的子类在屏幕上显示填充的椭圆形 当我尝试使用 FlowLayout 将这个子类的对象添加到 JFrame 时,椭圆形未正确显示,我不知道问题是什么。你能帮我一下吗?

enter image description here

这是我的代码

@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);

最佳答案

查看FlowLayout的Javadoc:

A flow layout lets each component assume its natural (preferred) size

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

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

关于java - 使用 FlowLayout 将 JPanel 添加到 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085790/

相关文章:

java - Dropwizard hibernate 搜索

java - 将图像添加到jtable中,结果集中有哪些数据

java - 单击按钮时显示或隐藏部分面板的 Swing 方法?

java - JFrame 在图标化时监听 KeyEvent

java - 类构造函数中的堆栈溢出错误

java - Netty IdleStateHandler 对于大消息超时

java - 泛型和原始类型

java - JPanel及组件自动改变位置

java - 将 JFrame 打印到 Java 页面

java - 如何使用 NetBeans GUI 创建器将 jPanel 动态添加到已添加到 JFrame 的 JScrollPane?