java - 为什么组件没有出现在我的 JComponent 中?

标签 java swing jpanel layout-manager jcomponent

我创建了一个扩展 JComponent 的类。该类的对象被添加到 JPanelJPanel 有一个默认的流布局管理器。当我将 JPanel 添加到 JFrame 时,除了一个空的 JFrame 之外什么都看不到。是的,框架是可见的并且调整到最大屏幕尺寸。

我尝试了几种修改来改变这个问题并推导出:

  • 组件大小 - 将其设置为无效并且仍然是一个空的 JFrame
  • 中间面板 - 将组件添加到中间面板并且仍然是一个空的 JFrame

最后,我决定更改要添加组件的面板的布局管理器,并将面板布局管理器更改为边框布局。然后我将组件添加到中心,现在它出现了。

我的后续问题是:

  • 在制作自定义 JComponent 时,我的注意事项是什么?
  • 为什么我必须更改自定义 JComponent 面板的布局管理器?

我天真地问“如果我可以向面板添加一个 JButton,并且使用它显示的默认流布局管理器,为什么不使用自定义 JComponent

我的自定义 JComponent 是一个内部类:

public class OuterClass
{
     private class Panel extends JPanel
     {
           public Panel()
           {
                add(new Custom());
           }
     }

     private class Custom extends JComponent
     {
          public Custom()
          {
             // Initialization of members but not size of component
          }
     }
}

最佳答案

A JPanel has a default flow layout manager.

是的,FlowLayout 尊重每个组件的首选大小。您的组件没有首选大小,因此默认为 (0, 0)。

覆盖 getPreferredSize() 方法以返回适当的维度。

关于java - 为什么组件没有出现在我的 JComponent 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21001454/

相关文章:

java - PrintWriter 类的反面是什么?

java - 360 度运动动画 Sprite Java 游戏 Libgdx

java - 在多显示环境中保存 JFrame 位置

java - 当鼠标悬停在 JTable 上时滚动 JPanel

java - JPanel 中的重叠组件

java - 为什么我无法将 JPanel 添加到 JFrame?

java - 如何在Java中的Lambda函数中调用父类中的方法?

java - 为什么我们需要System类来调用out.println()方法?

java - repaint() 方法不调用paintCompnent

Java:如何对齐 JPanel