【问题标题】:Resizing two ScrollPanes equally in Swing在 Swing 中等量调整两个 ScrollPanes
【发布时间】:2012-11-03 00:50:51
【问题描述】:

我正在设计一个 JFrame,它包含两个按顺序排列的 ScrollPanes,一个在另一个之下。我正在使用 NetBeans (Matisse?) 的内置表单编辑器,它使用 GroupLayout。

我观察到:在调整框架大小时,首先调整底部的 ScrollPane 的大小直到它消失,然后是此 ScrollPane 上方的按钮,最后是另一个 ScrollPane。

我想要什么:在调整 Frame 的大小时,两个 ScrollPanes 的大小应该相同,所以如果 Frame 的大小改变了 X,我希望两个 Scrollpanes 的大小都改变 X/2。

这可能吗?怎么做? (首选 GroupLayout 的解决方案)

P.S.:整个布局包括以表格方式放置的按钮和标签。所以 GroupLayout 对它来说已经相当好用了。

P.S.:除了简单的布局(网格、框)之外,最好的选择似乎是 MigLayout。

让我引用white paper

增长和收缩 当一个组件没有给出首选尺寸时会发生什么是非常可定制的。可以选择将组件划分为增长和收缩优先级组,其中较高优先级将收缩/增长,然后调整具有较低优先级的组件/行/列的大小。可以设置这些组内的增长权重,以指定如何在该优先级组中的组件/行/列之间分配可用空间或收缩。 ...

P.S.2:我现在正在使用 MigLayout,它是如此强大,我想再次推荐它。顺便提一句。我发现他们的cheat sheet 非常有用(解释了所有选项)。他们网站上的演示也包含许多示例和源代码。使用 MigLayout 可以轻松解决这里的问题以及许多其他问题。

【问题讨论】:

  • 请编辑您的问题,在sscce 中包含您描述的问题。

标签: java swing resize jscrollpane grouplayout


【解决方案1】:
Is this possible and how?

通过使用GridLayoutGridBagLayoutBoxLayout(必须覆盖所有MinMaxPreferredSize)和MigLayout

Is this possible and how? (Solutions for GroupLayout preferred)

我不会走这条路,甚至有可能

【讨论】:

  • GroupLayout 似乎没有解决方案(我尝试了 linkSize 但这并没有改变行为)。 Grid-、GridBag- 和 BoxLayout 不允许复杂的布局。对我来说,MigLayout 似乎是唯一的可能性。它有点复杂,但应该允许控制调整大小的行为。
【解决方案2】:

网格布局可确保元素大小均匀。使用:

JPanel panel = new JPanel(new GridLayout(2,1));

由于您希望它们垂直对齐,即一个接一个,2 表示行数,1 表示列数。

然后只需将 ScrollPanes 添加到面板:

panel.add(scrollPane1);
panel.add(scrollPane2);

有关网格布局的文档,请查看this

【讨论】:

  • 感谢您的建议。不幸的是 GridLayout 对我的任务来说太不灵活了。
  • 您能告诉我们更多细节吗?也许向我们展示一些代码。我相信我们可以为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2019-02-07
  • 2015-04-12
  • 2022-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
相关资源
最近更新 更多