【问题标题】:Determine size of the area where a component can potentially expand确定组件可能扩展的区域大小
【发布时间】:2015-02-13 02:34:03
【问题描述】:

有没有办法确定组件在容器中可以拥有的区域?

我正在使用MigLayout。假设我有两个组件:一个JPanel 和一个JSlider,它们被添加到一个容器中。 JSlider 停靠在容器的南边,并在调整容器大小时水平扩展/收缩。 JPanel 有一些初始大小,例如 100x100。在这种情况下,除了 JSlider 占据的区域之外,JPanel 可以拥有容器所拥有的所有区域。所以如果容器是 400x400,JPanel 可以有 400x384 的大小,如果滑块的高度是 16,如果它完全展开。

无论如何,如果我打电话给panel.getSize(),我应该得到 100x100。我想知道是否有办法获得组件可以扩展的区域的大小。所以在这种情况下,我想做一些让我得到 400x384 尺寸的东西。


插图:

这里黑色轮廓标记容器,白色表示未使用空间,红色标记滑块,蓝色标记我要确定其可用空间的组件。

【问题讨论】:

  • 为什么需要知道可用空间?您的自定义组件应该请求它需要的所有空间,并让布局管理器分配空间。
  • @camickr 我正在手动调整 jpanel 的大小以保持纵横比。
  • @camickr 但这不是这个问题的重点。无论如何,我想知道我的要求是否可行。
  • 是的,这就是重点,因为很多时候,当有更简单的方法可以解决问题时,人们会实施复杂的解决方案。但首先我们需要知道确切的要求和要求的原因,而不仅仅是您尝试的解决方案。

标签: java swing resize layout-manager miglayout


【解决方案1】:

我会改变你的布局。

例如,我会使用 BorderLayout。然后将红色面板添加到南部,将另一个面板添加到 BorderLayout 的“CENTER”。这个另一个面板现在将包含框架中的所有可用空间。

然后将蓝色面板添加到刚刚添加到中心的面板中。现在您可以使用:

blue.getParent().getSize();

确定可用空间。

换句话说,不要总是试图用一个布局管理器来解决布局问题。

【讨论】:

  • 这是我最初的想法。当时看起来有点骇人听闻,但既然你给了我同样的解决方案,我想我会接受的。但是,我看不出在 miglayout 上使用borderlayout 的意义。我也可以使用 miglayout 轻松做到这一点。
猜你喜欢
  • 2010-12-12
  • 2021-11-26
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
相关资源
最近更新 更多