18

大家都用什么java GUI布局管理器?最近,我一直在使用MigLayout,它有一些强大的组件控件。只是想看看除了标准的 JDK 之外,其他开发人员正在使用什么。

4

22 回答 22

17

MiGLayout是 Java 开发人员广泛使用的 GUI 布局管理器。

于 2008-09-23T16:22:50.277 回答
9

GridBagLayout是可用的。一旦你习惯了使用它,它就会很好用。我认为标准的 JDK 布局管理器本身就非常强大。此外,您还可以最大限度地减少对 3rd 方库的依赖。

于 2008-09-22T19:51:36.353 回答
7

MiG 和 FormLayout (JGoodies) 都非常适合手动布局(几乎所有布局最终都变成了手动)。我最大的建议是设计您的视图,以便您可以完全删除布局并重新实现它而不影响您的应用程序(视图和控制器的良好分离是这里的关键)。

一定要看看 JGoodie 的 PresentationModel 方法来实现“哑”视图。我将这种技术与 GUI 构建器一起使用(我将 GroupLayout 与 Jigloo GUI 构建器插件一起使用)来扔掉快速原型。经过 3 或 4 次迭代后,这通常会消失,我们使用 MiG 或 FormLayout 重新实现。

编辑:自从我写这篇文章以来,我已经开始使用 MiG 来进行我的所有布局,并且我不再使用 GUI 构建器 - 使用 MiG 进行布局太容易了。

于 2008-09-23T04:47:13.927 回答
5

我使用的最后一个 Swing 应用程序使用了JGoodies 的 FormsLayout

于 2008-09-22T19:40:10.140 回答
5

我使用GridBagLayout。它似乎需要很多代码,但它使布局看起来非常漂亮。

我还喜欢将BorderLayout与 GridBagLayout 面板结合起来,以实现出色的可定制性。

于 2008-09-22T19:52:17.147 回答
5

我非常喜欢使用TableLayout而不是 GridBagLayout。一切都是有道理的,而每次我尝试使用 GridBagLayout 时,它都会压垮我的灵魂。

于 2008-09-22T20:10:54.700 回答
5

我曾经为控件使用 GridBagLayout,但是从 java1.6 开始,我将使用GroupLayout 太棒了。

这是使用它的屏幕截图和示例代码!

替代文字 http://img145.imageshack.us/img145/7844/screenshot1dz8.png

    private void layoutComponents(){
        JPanel panel = new JPanel();

        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);

        layout.setAutoCreateGaps(true);

        layout.setAutoCreateContainerGaps(true);
        SequentialGroup hGroup = layout.createSequentialGroup();

        JLabel nameLbl  = new JLabel("Name");
        JLabel countLbl = new JLabel("Amount");
        JLabel dateLbl  = new JLabel("Date(dd/MM/yy)");
        hGroup.addGroup(layout.createParallelGroup().
                addComponent(nameLbl).
                addComponent(countLbl).
                addComponent(dateLbl).
                addComponent(go));

        hGroup.addGroup(layout.createParallelGroup().
                addComponent(name).
                addComponent(count).
                addComponent(date));

        layout.setHorizontalGroup(hGroup);

        SequentialGroup vGroup = layout.createSequentialGroup();

        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(nameLbl).addComponent(name));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(countLbl).addComponent(count));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(dateLbl).addComponent(date));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(go));
        layout.setVerticalGroup(vGroup);

        frame.add( panel , BorderLayout.NORTH );
        frame.add( new JScrollPane( textArea ) );
    }
于 2008-12-02T05:56:41.673 回答
5

我的大部分面板都使用DesignGridLayout 。

对于DesignGridLayout无法完全处理的稀有面板,我使用了 Borderlayout 和DesignGridLayout.

使用 DesigngridLayout,您可以用最少的代码行数手动编写布局,易于输入和阅读:

DesignGridLayouut layout = new DesignGridLayout(myPanel);
layout.row().grid(lblFirstName).add(txfFirstName).grid(lblSurName).add(txfSurName);
layout.row().grid(lblAddress).add(txfAddress);
layout.row().center().add(btnOK, btnCancel);

面板网格的每一行都由一行代码定义。如您所见,“绘制”您的面板非常简单。

此外,我发现DesignGridLayout它还有一些独特的功能(例如它的“智能垂直调整大小”)。

于 2009-01-06T05:46:54.687 回答
3

GridBagLayout 功能强大但非常原始:连接布局的代码非常冗长。这个实用程序库(实际上只有 1 个包含大约 10 个类的 jar 文件)简化了很多工作:http ://code.google.com/p/painless-gridbag/以下片段引自该网站的主页:

    PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false);

    gbl.row().cell(lblFirstName).cell(txtFirstName).fillX()
             .cell(lblFamilyName).cell(txtFamilyName).fillX();
    gbl.row().cell(lblAddress).cellXRemainder(txtAddress).fillX();

    gbl.doneAndPushEverythingToTop();
于 2009-11-02T19:54:05.980 回答
2

作为一般概述,您可能会发现我很久以前在 sun 上写的一篇文章很有用。它不是最新的布局管理器,但它专注于布局管理器的有效嵌套,而不是试图用一个布局做所有事情。

请参阅http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr

于 2008-09-22T23:15:34.177 回答
2

我发现对于任何重要的 GUI,我都使用带有嵌套子面板的多个布局,其中主面板可能有一个GridBagLayout,并且每个子面板(通常没有边框或指示它是一个面板)使用更简单的布局,其中可能的。通常我会使用BorderLayout, FlowLayout, 和BoxLayout用于更小、更简单的子面板。GridBagLayout通过将 GUI 的小部分划分为子面板并使用可能的最简单布局来控制 GUI 的该部分,您可以创建复杂、排列良好的显示,而不会因众多选项而感到头疼。此外,通过将类似的显示功能分组到一个面板中,它可以创建更具可读性的代码。

于 2008-09-23T16:18:11.630 回答
1

为作为 netbeans 一部分的尾数 gui 构建器开发的Spring 布局。

于 2008-09-22T19:32:20.360 回答
1

我也使用过GroupLayout。同样,它是从 Java6 开始的标准 JDK 布局管理器,但您也可以找到单独的库。

于 2008-09-22T19:55:15.470 回答
1

我一直是 GridBagLayout 的忠实粉丝。它非常类似于 HTML 表格,因此对于那些 web 程序员来说是直观的。

于 2008-09-23T04:53:33.337 回答
1

我开始使用各种嵌套布局,然后转到 GridBagLayout(这很令人沮丧)。从那以后,我尝试了 FormLayout(但发现它不适合除了表单之外的任何东西)并坚定地选择了 TableLayout,总的来说我很满意。

从那时起,我发现了 MiGLayout,虽然除了玩它之外我没有做更多的事情,但它似乎非常有能力,与 TableLayout 非常相似,并且可能更干净一些。

对我来说最大的好处是 MiGLayout 将成为 JDK 的一部分,所以我打算在它出现时完全使用它。

要记住的另一件事是,无论您选择哪种重量级 LayoutManager,总有一些更简单的布局管理器(例如 GridLayout)有一席之地。我已经看到使用 GridBagLayout 完成了一些可怕的事情,而使用更简单的布局管理器可以更轻松地完成这些事情。

于 2008-10-10T00:01:23.390 回答
1

我更喜欢尽量减少对 3rd 方库的依赖,因此通常是 BoxLayout 用于对话框,而 GridBagLayout 用于“复杂”布局。GridBagLayout 很容易理解,但配置起来有点困难。我为自己编写了一个从 HTML 布局创建代码的工具(希望对其他人也有帮助): http ://www.onyxbits.de/content/blog/patrick/java-gui-building-gridbaglayout-manager-made-easy

于 2009-04-16T22:35:03.270 回答
0

我发现的唯一一个我真正喜欢的布局管理器是相对布局管理器。相对布局管理器的工作方式与对话框的概念组织方式一致。一个缺点是,虽然此布局管理器处理附加约束。它似乎没有处理比率约束。幸运的是,它设计得很好,我能够实现这个功能。

于 2008-09-22T22:56:38.060 回答
0

我在嵌套BoxLayoutSpringLayout时使用BorderLayout 90%

于 2008-10-22T04:51:53.333 回答
0

我有点Java新手。

我尝试了 GridBagLayout,放弃了,然后尝试了 BoxLayout,然后放弃了,然后制作了我自己的自定义布局,它有效。对于 GridBag 和 Box,我做出了最好的猜测,布局引擎决定做一些不同的事情,没有任何明显的方式来调试它们。

使用我的自定义布局,我可以打印出坐标、宽度和高度,以找出哪里出了问题。放置东西有点数学,但是您可以使用 java 的全部功能,而不是使用内置布局管理器之一的有限词汇。

当然这只是一个家庭项目,你永远不会被允许在工作中这样做。

于 2008-12-02T05:41:36.277 回答
0

我将 GridBagLayout 用于类似布局的表单,将 BorderLayout 用于简单布局,将 FlowLayout 用于中间有一些空格的水平图标/按钮的数量。Netbeans 也是一个很好的 GUI 构建器,可以避免大量繁琐的布局编码以节省您的时间。

于 2009-01-16T20:44:01.380 回答
0

我最近开始使用 Swing,并且正在使用 GridBagLayout。

于 2009-10-30T10:04:55.623 回答
0

我厌倦了所有那些需要大量设置、可读性不强或手动完成的布局管理器,所以我编写了自己的非常简单的 laoutmanager,它使用两个照片角的抽象来保持每个组件的位置。您可以像这样添加组件:parent.add(child,"topleft(0, 0.5)bottomright(0.5,1.0)");

看看这里https://github.com/hageldave/UsefulStuff/blob/master/src/PhotoCornersLayout.java ;) 你自己负责正确的布局,因为它不会检查布局的重叠或其他缺点。

于 2013-11-20T22:32:09.073 回答