【问题标题】:Java Vertical layoutJava垂直布局
【发布时间】:2014-10-07 22:06:47
【问题描述】:

我无法解决以下两个问题。

问题 1

我有一个JScrollPane 类型的面板,它承载了一个JPanelJPanel,在程序执行期间,接收到越来越多的子面板来托管,因此它的高度逐渐增加(它正在使用流布局管理器)。我想要并且无法实现的是,当JPanel 的内容变得高于窗口时(由于添加了许多组件),使JScrollPane 面板显示垂直滑动条。

到目前为止,我已经设法让用户可以向JPanel 添加子面板。但是,当它们变得太多,并且其中一些离开屏幕时,垂直滑动条不会出现。我怎样才能让他们这样做?

请注意,我希望窗口宽度可以调整。当窗口调整大小时,JPanel 应该重新计算它的高度,并相应地调整幻灯片。

问题 2

JPanel 中,我在问题 1 中告诉过您,我使用的是流布局管理器,它将组件设置为水平线。但是,我更喜欢垂直配置,它应该将所有组件添加到另一个正下方,而不是像中心一样的配置。它们应该如下所示:

O============O
|COMP.1===   |
|COMP.2=     |
|COMP.3===== |
|            |
|            |
O============O

不是这样的:

O============O
|COMP.1===   |
|            |
|COMP.2=     |
|            |
|COMP.3===== |
O============O

在保持对问题 1 解决方案的兼容性的同时,获得此最终配置的最佳布局管理器是什么? (也就是说,在添加每个组件后调整JPanel 的高度?)

非常感谢您的帮助!

【问题讨论】:

  • 您可以使用 GridBagLayout,稍加调整即可完成这项工作,或者使用来自 SwingLabs、SwingX 库的 VerticalLayout

标签: java swing jscrollpane layout-manager vertical-scrolling


【解决方案1】:

我不是 Swing 的铁杆用户,但在过去几个月使用它后,我建议使用 MIGLayout。它用途广泛,可让您非常轻松地进行布局。这需要一点时间来学习,但它会使许多布局问题变得非常容易,例如表单。

使用 MIGLayout 可以像这样解决您的问题:

JScrollPane sp = new JScrollPane();
JPanel panel = new JPanel();
panel.setLayout(new MigLayout("gap rel 0", "grow"));

然后可以像这样添加面板:

panel.add(new JPanel(), "wrap");

【讨论】:

    【解决方案2】:

    但是,我更喜欢垂直配置,它应该将所有组件添加到另一个正下方,

    听起来像BoxLayout 应该可以解决问题。阅读 Using Layout Manager 上的 Swing 教程部分,了解有关所有 Swing 布局的更多信息。

    而不是像中心一样的性格。

    如果您在对齐方面遇到问题,请不要忘记阅读Fixing Alignment Problems 上的部分。

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 2012-07-02
      • 2012-10-25
      • 2018-07-28
      • 2010-10-28
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多