【问题标题】:Java Layout - Leaving a certain space for a non-visible elementJava 布局 - 为不可见的元素留出一定的空间
【发布时间】:2012-02-02 12:39:02
【问题描述】:

我正在为自己制作一个摇摆应用程序,并且一直在尝试几种不同的布局。在我尝试过的所有布局(BoxLayout、FlowLayout、BorderLayout、GroupLayout)中,我遇到的一件事是我想隐藏我的一个元素,但我想留下一个确切大小的空白在它的位置。目前,当元素消失时,或者如果我将元素设置为在启动时不可见,那么要么整个窗口变小,要么会发生一些事情,比如文本字段会扩大到一个可笑的大小。

指定元素的大小似乎根本没有效果。

有没有办法让一个不可见的元素仍然占据布局中的空间?

为什么我的元素没有得到我指定的尺寸?

感谢任何指点。

非常感谢

【问题讨论】:

  • 指定元素的大小似乎根本没有效果这是预期的行为:布局管理器的核心任务是定位和调整它认为正确的组件大小,手动干预被忽略了:-)

标签: java swing layout-manager


【解决方案1】:

试试Box.createRigidArea。描述很简单:

创建一个始终为指定大小的不可见组件。

这将创建一个可用于任何布局的Component

【讨论】:

    【解决方案2】:

    唯一完全安全的“想要隐藏我的一个元素,但我想在它的位置留下一个精确大小的空白区域”的方法是 LayoutManager,它在其布局过程中包含不可见的组件。如果没有一个核心实现可以做到这一点,请使用像 f.i. 这样的第三方管理器。 MigLayout。

    注意:Box.RigidArea 具有固定大小 - 因此对于特定布局状态的占位符来说已经足够了,但如果 f.i. 需要手动调整。父级大小变化。

    【讨论】:

    • 太棒了。感谢您的回答。我来看看 MigLayout。
    • @kelopatra DesignGridLayout 也这样做 ;-)
    • @jfpoilpret hach​​,我怎么会忘记 :-)
    【解决方案3】:

    尝试将component.setVisible(false); 放在frame.pack(); 之后

    【讨论】:

    • 谢谢。我已经试过了。将组件放在 pack() 之前意味着窗口更小。放置在之后意味着其他组件之一扩展以填补空白。这是使用 BoxLayout。
    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 2018-11-17
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多