【问题标题】:Java Picking a Layout IssueJava 选择布局问题
【发布时间】:2024-01-06 22:13:02
【问题描述】:

大家好,我正在尝试制作一个顶部带有导航栏的屏幕,但不确定哪种布局最适合使用。基本上我希望屏幕看起来像:

[Nav Panel Up top, One row]
[            ^            ]
[            |            ]
[       Empty Panel       ]
[            |            ]
[            |            ]
[            |            ]
[            ^            ]

嵌套面板包含导航按钮。

我的问题是,我应该使用 GridBagLayout 并将其设置为 10 行并让空面板扩展其中的 9 行,还是在 Java 中有更好的布局可以让我这样做?

【问题讨论】:

  • 为什么不用导航按钮填充菜单栏?
  • @mre OP 可能需要图标。 (尽管在这种情况下,最好使用导航栏并将操作添加为菜单条目。)
  • @Inerdial,不确定我是否理解您的论点。您仍然可以将图标添加到导航按钮..
  • 您可以向菜单栏添加按钮吗?我对此一无所知。代码基本上是 JMenu home = new JButton("Home");从那里它会像普通按钮一样处理?
  • @Tyler,是的,你可以,是的,他们会的。

标签: java swing layout panel gridbaglayout


【解决方案1】:

“导航栏”听起来也可以单独作为一个组件。如果额外的嵌套级别不是问题,我只需使用BorderLayout,将导航栏组件NORTH,以及空面板(我想是UI 的其余部分)放入CENTER .

我更喜欢 GridBagLayout 来制作复杂的控件,这些控件不能再拆分为子面板,并且需要有很多边对齐的布局——它的灵活性对于这种情况来说有点过分了。 (当然它仍然非常适合这项任务,只是不是完成它的最简单方法。)

【讨论】:

  • +1 用于边框布局。插入 CENTER 的面板仍然可以使用任何布局
【解决方案2】:

您不会希望在GridBagLayout 中使用 9 行来保存一个组件;它比这更强大。而是给导航面板的GridBagConstraints 一个0weighty1 的空面板一个weighty(或任何正数)。这将导致空面板占用任何额外的空间。

【讨论】: