代码之家  ›  专栏  ›  技术社区  ›  Carl Smotricz

你推荐哪种摆动布局?[关闭]

  •  43
  • Carl Smotricz  · 技术社区  · 16 年前

    Java库中只有8个布局管理器,还有一组第三方产品。

    前几天,我试着用SpringLayout…好吧,这对我来说不合适。看到我 other question . 所以…如果你有一个Swing应用程序要设计,你想要你的布局 正是如此 ,您首选的布局管理器是什么?有什么有趣/有用的经验吗?

    更新: 是的,当然我知道不同的LMS适合不同的布局。但我希望你们中的大多数人都会用1、2或3来做你所做的每件事,或者你发誓说只有一件事是如此的多才多艺,你不需要任何其他东西。有了足够的响应,我希望看到类似钟形曲线的东西,在GridBagLayout或MigLayout上有一个峰值(例如),使用(例如)BoxLayout或FlowLayout的一些散乱者的长尾巴。

    希望,反应的分布将揭示一些人们最常用于什么的趋势。 把事情搞定 占地面积


    更新和摘要

    好吧,两天后,米格布局肯定在前面!它的粉丝们会很高兴听到这个布局很快就会进入“官方”图书馆。

    grouplayout、formslayout和tablelayout都是比较新的,没有太多曝光。也许其他人会像我一样惊讶地发现他们。

    14 回复  |  直到 12 年前
        1
  •  62
  •   Joonas Pulakka    16 年前

    MiGLayout 毫无疑问。老实说,这是我所知道的唯一一个有意义的Swing布局管理器。

    核心JDK中只有8个布局管理器,这一事实表明Swing创建者完全不知道他们要做什么。这并不是为了浪费剩余的时间——它是一个很好的GUI工具包,除了布局管理器。

        2
  •  23
  •   Michael Borgwardt    16 年前

    所有这些,结合起来。 这就是重点。每个布局管理器都满足不同的需求,通过使用不同的布局管理器嵌套面板,您几乎可以实现任何事情。

    “在一个面板中做任何事情”布局管理器喜欢 GridBagLayout GroupLayout (和许多第三方)有它们的位置,主要是当你需要布局的不同部分的组件来对齐时,但是如果布局很大,它们通常会导致一个巨大的,难以处理的混乱。

        3
  •  16
  •   rob    12 年前

    这取决于您创建的是哪种图形用户界面。您可能只使用简单布局中的一个或两个,或者您可能需要使用更高级的布局。我的总体布局管理器使用可能会分解为类似这样的内容,尽管它会根据项目而有所不同:

    • 65%的gridbaglayout——不管你需要做什么,它都能完成。
    • 15%盒/盒布局-非常适合快速和轻松地将几个组件粘在一起。
    • 12%边框布局-适用于将按钮面板或信息面板附加到内容面板。我几乎总是用它向JFrame添加内容。
    • 3%流式布局-对按钮面板有用,但其他不多。
    • 3%卡片布局-主要用于显示不同操作模式下不同内容面板的程序。
    • 2%的其他布局-我很少需要任何其他布局,但偶尔也有其他布局中的一个可以派上用场。

    一旦你掌握了gridbaglayout的诀窍,最初的编写并没有那么糟糕,但是在以后的工作或调试中仍然不好看。我最近尝试了miglayout,但很失望地发现miglayout实际上是 更多 在这种情况下,使用起来比网格布局复杂。

    有些人试图避免像瘟疫一样的网格布局;但事实是,有些事情是简单布局的组合无法处理的。将一个图形用户界面拆分为不同逻辑部分的面板是很好的,但是我认为如果您只是为了定位组件而创建了一组不必要的额外嵌套面板,那么您显然需要学习如何使用网格布局(或其他类似的高级布局,如miglayout)。你可能会让你的图形用户界面看起来很好,有一堆乱七八糟的嵌套边界布局、网格布局和框布局,但一旦有人开始调整你的应用程序窗口和对话框的大小,使其比你最初设计的窗口和对话框小或大,你的图形用户界面可能看起来很糟糕,你的客户会开始形成一个负面的意见abo。但你的产品,因为你不能得到这样一个简单的事情正确。

    更新:我在Eclipse中使用WindowBuilder已经有一段时间了,它大大简化了许多布局的工作,特别是GridBagLayout。我过去常常花很多时间手工编写布局,但使用WindowBuilder或任何类似的高级可视化编辑器,您可以在更短的时间内创建布局。

        4
  •  15
  •   mantrid    12 年前

    DesignGridLayout 两者看起来都很棒,而且很容易使用 Fluent接口 .

    看看这个例子:

    enter image description here

    只需几行干净的代码:

        layout.row().grid(label("Last Name"))   .add(lastNameField) .grid(label("First Name"))  .add(firstNameField);
        layout.row().grid(label("Phone"))       .add(phoneField)    .grid(label("Email"))       .add(emailField);
        layout.row().grid(label("Address 1"))   .add(address1Field);
        layout.row().grid(label("Address 2"))   .add(address2Field);
        layout.row().grid(label("City"), 1)     .add(cityField);
        layout.row().grid(label("State"))       .add(stateField)    .grid(label("Postal Code")) .add(postalField);
        layout.row().grid(label("Country"), 1)  .add(countryField);
        layout.emptyRow();
        layout.row().center().add(newButton).add(deleteButton).add(editButton).add(saveButton).add(cancelButton);
    
        5
  •  11
  •   Jack    16 年前

    这取决于您需要哪种布局,这就是为什么您有8种布局:

    1. BorderLayout ,对于设计普通的内容框架(中间有主要内容,侧面有助手)非常简单和有用。
    2. GridLayout ,当您的对象网格应该是相同大小(按钮?文本字段?).
    3. GridBagLayout 非常灵活,需要做一些调整才能很好,而且很冗长(但是如果你想的话,我会告诉你的 把事情做好 )
    4. FlowLayout 没用的…不是很好的布局:只需将项目一个挨着另一个放置即可。
    5. CardLayout ,对于必须切换的选项卡或子视图很有用。
    6. BoxLayout 不要用得太多。它应该是一种增强 流程布置 但它不够灵活,不能集中使用。
        6
  •  9
  •   ninesided    16 年前

    GroupLayout 相当体面。它最初是为GUI构建器应用程序设计的,但我发现它也非常直接地手工编写代码。

        7
  •  8
  •   clartaq    16 年前

    FormLayout 的一部分 JGoodies Forms 包裹对我来说是一个累赘。它不是完全灵活的,因为它努力使你的设计看起来很好。我已经在几十个项目中使用了几年,它一直在快速地产生好看的输出。

    您可以用可读文本指定布局,然后添加组件。完成。

        8
  •  6
  •   Tom Hawtin - tackline    16 年前

    GridBagLayout .几乎所有你需要的(种类),它在Java库中。诚然,它确实需要一些帮助,而且API很糟糕。

    GroupLayout 把你的布局代码弄得一团糟。好吧,所以大多数人的GUI代码都是泥球。但你的不一定是!也许一个好的界面可以放到这个布局管理器上,但我怀疑它可能必须被克隆和拥有。

    我不赞成引入外部依赖,除非它们确实是必要的。另外,许多第三方布局管理器使用数据字符串,这些字符串具有所有常见问题。

        9
  •  6
  •   bora.oren    16 年前

    我通常使用 border layout 具有 gridlayout 首先,我在纸上设计了UI原型;

    alt text http://www.usernomics.com/images/paper-mockup.jpg

    之后,我们可以在borderlayout上将屏幕拆分为gridlayout。在这张图片中,我们可以看到北、中、南部分(borderlayout元素)和每个部分的布局可以是gridlayout或borderlayout,这取决于您。相同的布局可以在另一个布局中使用一个。

        10
  •  5
  •   glebm    16 年前

    在其图形用户界面设计器中使用intellij思想。使网格布局简单。

    http://madbean.com/anim/totallygridbag/

        11
  •  5
  •   Bart Kiers    16 年前

    你的问题没有真正的答案,除了:这要看情况而定。这取决于您要创建的框架(窗体)的类型。我不是摇摆大师,但创建了两个(中等高级的)GUI,并且从未需要触摸GridBagLayout管理器。我总是能够使用“更简单”的布局管理器组合来创建我的GUI。例如,可以为框架指定borderlayout,然后在该borderlayout的南部放置另一个布局。

        12
  •  4
  •   Marko cyn    13 年前

    我只使用 GridBagLayout 尤其是在做一些复杂的接口时,相信我 网格包布局 什么都能做。我还推荐了 FlowLayout 因为它很容易使用,也很容易理解,很适合放置一组按钮。实际上,我只使用这两种布局,因为它是JDK库的一部分 MigLayout 我还没试过,所以现在不能推荐给你。

        13
  •  3
  •   Joy Malik    14 年前

    有以下布局选项可用:

    MiGLayout
    TableLayout
    GroupLayout
    FormsLayout
    

    在以上这些中,最推荐使用miglayout,因为它是Swing布局管理器。其他人没有太多曝光。

        14
  •  2
  •   Sheldon R.    14 年前

    我是Swing新手,但在编写我的第一个Swing应用程序的过程中,我尝试了四种不同的布局管理器:FlowLayout、BoxLayout、GridLayout和GroupLayout。在我看来,flowlayout和boxlayout似乎最适合用于布局类似大小的组件组。对于不同大小的组件,GroupLayout似乎是可行的方法。比其他两个学习曲线更陡,但绝对值得。至于gridlayout,我认为通过使用flowlayout和boxlayout的组合,您可以使用该布局管理器获得相同的结果——而且您可能对组件的放置有更多的控制。但也许只有我一个人。)

    谢尔登