【问题标题】:Why is the setPrefferedSize() method not working for JPanel?为什么 setPreferedSize() 方法不适用于 JPanel?
【发布时间】:2023-03-20 17:14:01
【问题描述】:

我已经创建了 n 个 JPanel,并且在每个 JPanel 中我添加了 3 个组件。我将这些 JPanel 作为行添加到新的 JPanel 中。 n 个 JPanel 的布局是 FlowLayout,主面板的布局是 BorderLayout。 setPrefferedSize() 方法适用于我在 n 个 JPanel 中添加的组件,但不适用于 n 个 JPanel。

我正在尝试 npanels[i].setPrefferedSize(new Dimension(300,25)), 我希望 JPanel 的高度等于其中添加的组件的高度(即 25)。 JPanel 的高度应该是某个最小值是否有任何约束? 请帮助我尝试了很多东西,但它不起作用.....

【问题讨论】:

    标签: java swing


    【解决方案1】:

    一些布局管理器倾向于忽略大小设置...

    在某处读到 BorderLayout 可能会忽略 widthNORTHSOUTH 组件, heightEASTWESTheightwidth 都被 CENTER 忽略...

    会是这样吗?

    另外,您能否提供一个屏幕截图或图表来解释发生了什么?

    【讨论】:

    • 添加屏幕截图给我 5 分钟
    • 但是我在这里找不到任何添加图片的选项...你能帮我吗?
    • “图片”图标看起来像一张图片;左数第六个;另见stackoverflow.com/editing-help
    【解决方案2】:

    setPreferedSize() 方法是 组件工作正常

    通常不需要为组件设置首选尺寸。 Swing 会自动计算首选尺寸。

    n 个 JPanel 的布局是 FlowLayout... 我在 n JPanels 中添加了它,但它 不适用于 n 个 JPanel

    同样,无需设置每个面板的首选尺寸。尺寸将根据所有组件的首选尺寸自动计算。

    主面板是BorderLayout

    这没有意义,因为您不能将“n”个面板添加到 BorderLayout。您只能在北、中和南添加一个组件,因此您最多可以拥有 3 个不同的垂直显示面板。在这种情况下,如果您使用 frame.pack(),那么每个面板都将以其首选大小显示。另一方面,如果您使用 frame.setSize(300, 400),那么 Center 面板的高度将被拉伸。

    既然您希望所有面板都具有相同的大小,也许您应该使用 GridLayout,否则您可以尝试使用 BoxLayout。阅读 Swing 教程。它解释了有关使用布局管理器的所有内容。

    如果您需要更多帮助,请发布您的 SSCCE

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 2020-09-25
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多