Java GUI LayoutManagers

时间:2008-10-29 20:47:07

标签: java swing user-interface

我正忙着做一个我必须为一个简单的程序制作图形界面。但我对布局很感兴趣。

这是个主意:
Layout Example

完成此类布局的最简单方法是什么?

您使用什么方法在java中进行布局。只需编码,或使用类似netbeans的IDE?

9 个答案:

答案 0 :(得分:4)

  

您使用什么方法在java中进行布局。只需编码,或使用类似netbeans的IDE?

用于GUI开发人员的NetBeans就像是小学生的计算器:在你不知道如何做事之前你真的不应该使用它,但它会为你节省很多时间。

(我很乐意回答你的主要问题,但我背后的防火墙阻挡了这张照片。)

答案 1 :(得分:2)

考虑到布局有多简单,我建议您使用BorderLayout,其中NORTH设置为容器的顶部,而JTable设置在BorderLayout的CENTER中。对于Top,它似乎是一个简单的BorderLayout,其中NORTH作为指令:south作为黑盒子(可能在带有FlowLayout的容器中)。顶部窗格的中心显示为2个GridLayouts容器,包含2行和2列,因此将thos放在另一个带有GirdLayout的容器中。

所以在伪:

Container(BorderLayout)
{
  @NORTH
    Container(BorderLayout)
    {
       @NORTH
         Label(Instruction);
       @CENTER
         Container(GridLayout(2,1))
         {
            Container(GirdLayout(2,2))
            {
              Label() TextField()
              Label() TextField() 
            }
            Container(GirdLayout(2,2))
            {
              Label() TextField()
              Label() TextField()
            }
         }
       @SOUTH
         Container(FlowLayout())
         {
           JButton() //shaded thing?
         }
    }
  @CENTER
    {
      JTable
    }
}

答案 2 :(得分:2)

我手工制作一切。像Christian一样,我对GUI构建者有过不愉快的经历;他们总是拒绝完全配置几个组件,或者他们生成了大量不必要的代码,这些代码使得以后的维护变得不切实际,或者两者兼而有之。

我曾经使用GridBagLayout构建了很多UI,但多年来,我从未见过无法使用嵌套的BorderLayouts,GridLayouts以及偶尔的BoxLayout或FlowLayout构建的办公环境UI。我见过的大约98%的东西都适用于嵌套的BorderLayouts。

在你的情况下,布局组织将如bmeck所说。从内存中讲,使用CENTER作为JTable(记得把它放在JScrollPane中!)和NORTH作为其他一切确保如果你调整你的JFrame,JTable将获得所有额外的空间,这应该是你想要的。对于顶部标签和字段,嵌套的GridLayouts应确保标签和字段的每个“列”占用相等的水平空间。 (它们只能获得足够的垂直空间才能完全可见,而且不会更多,因为JTable正在占用其他所有东西。)

其他一切只是添加边框并合理设置GridLayout填充。

答案 3 :(得分:1)

对于我自己的摇摆或swt的建设者从来没有那么好,这就是为什么我自己使用布局管理器编码布局。 你的问题没有提到你正在使用哪种gui系统,但我认为你想使用swing。如果是这种情况,我建议使用GridBagLayout进行布局。它在开始时并不容易使用,但只要你知道它是如何工作的,你就可以按照你想要的方式做大多数布局,我认为它也是你想要做的布局的布局管理者选择。

答案 4 :(得分:1)

我已经使用GUI布局生成工具进行超快速开发(可能会将接口的前2或3次迭代排除在外)。我最终发现使用这些工具的简单固定布局(没有布局管理器)是最好的方法。一旦我们开始磨练设计,我们就会切换到手动布局。

每当我尝试使用GUI生成器为布局管理器创建代码时,我几乎总是被困在最终布局停止工作的地方,而且我花了更多时间调试不可能读取自动生成的代码而不是无论如何我手工完成了布局。对于它的价值,当我们进行布局的早期阶段时,我们使用Eclipse的Jigloo插件。它非常便宜,做得很好。

我是MiGLayout的粉丝。我发现它非常容易用于简单的布局,并且能够进行极其复杂的布局。所有这些都不需要使用嵌套面板等... JGoodies Forms也很好,但更难使用。

答案 5 :(得分:1)

我在布局经理上写了一篇文章:

http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr

它描述了嵌套(如上面的bmeck演示)如何非常有效地用于许多UI设计。

答案 6 :(得分:1)

尝试表格布局。效果很好。

https://tablelayout.dev.java.net/

答案 7 :(得分:1)

使用GroupLayout

:)

所有对齐都很容易做到

答案 8 :(得分:0)

我以前喜欢Motif的XmForm。在Java中,我通常将Box放在盒子里面。所以我有一个垂直的盒子。该框的第一行包含指令的JLabel。第二行包含标签/结果内容,可能是某种网格。第三行包含任何变黑的东西,第四行包含JTable。然后我会花一些时间来弄清楚如何做标签/结果的东西。然后我可能最终会说“该死”,并将其作为GridBagLayout。