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

有帮助吗?

解决方案

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

其他提示

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

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

绝对可以看一下JGoodie的PresentationModel方法来实现'哑'视图。我将这种技术与GUI构建器(我使用GroupLayout和Jigloo GUI构建器插件)一起用于抛弃快速原型。经过3或4次迭代后,通常会出现窗口,我们使用MiG或FormLayout重新实现。

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

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

我使用 GridBagLayout 。它似乎需要很多代码,但它使得布局非常好看。

我还想结合使用 BorderLayout 使用GridBagLayout面板实现出色的可定制性。

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

我使用GridBagLayout作为控件,但是从java1.6开始我将使用 GroupLayout 非常棒。

这里有截图和使用它的示例代码!。

alt text 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 ) );
    }

我为大部分面板使用 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 具有一些独特的功能(例如“智能垂直调整大小”)。

GridBagLayout非常强大但非常原始:连接布局的代码非常冗长。这个实用程序库(实际上只包含大约10个类的1个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();

总的来说,你可能会发现我在太阳下写的一篇文章很有用。它不是最新的布局管理器,但它专注于布局管理器的有效嵌套,而不是尝试用一个布局做所有事情。

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

我发现对于任何非平凡的GUI,我使用带有嵌套子面板的多个布局,其中主面板可能具有 GridBagLayout 和每个子面板(通常没有边框或指示它是一个面板)尽可能使用更简单的布局。通常,我会使用 BorderLayout FlowLayout BoxLayout 来获得更小,更简单的子面板。通过将GUI的小部分划分为子面板并使用最简单的布局来控制GUI的这一部分,您可以创建复杂,排列良好的显示,而不必担心 GridBagLayout 的许多选项。此外,通过将类似显示功能分组到面板中,它可以创建更易读的代码。

弹簧布局 mantissa gui builder是netbeans的一部分。

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

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

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

从那以后我发现了MiGLayout,虽然我没有做太多的事情,但它似乎非常有能力,非常类似于TableLayout,可能还有点清洁。

对我来说最重要的是MiGLayout将成为JDK的一部分,因此我打算在它出现时几乎完全使用它。

要记住的另一件事是,无论你选择哪种重量级的LayoutManager,总会有一些更简单的布局管理器,比如GridLayout。我已经看到GridBagLayout做了一些可怕的事情,可以通过更简单的布局管理器轻松完成。

我更喜欢最小化对第三方库的依赖性,因此对于对话框通常是BoxLayout而对于“复杂”而言通常是GridBagLayout。布局。 GridBagLayout很容易理解,但有点难以配置。我自己写了一个从HTML布局创建代码的工具(希望也可以帮助其他人): http://www.onyxbits。德/内容/博客/帕特里克/ Java的GUI建设-的GridBagLayout经理制的易

我找到的唯一布局管理器,我实际上喜欢相对布局管理器。相对布局管理器的工作方式与概念组织对话框的方式一致。一个缺点是,这个布局管理器处理附加约束。 似乎处理比率限制。幸运的是它设计得很好,我能够实现这个功能。

我使用 BorderLayout 嵌套时有90%的时间 BoxLayout SpringLayout

我是一个Java新手。

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

通过我的自定义布局,我可以打印出坐标,宽度和高度,以找出它出错的地方。它有点蹩脚放置东西,但你已经掌握了java的全部功能,而不是其中一个内置布局管理器的有限词汇。

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

我使用GridBagLayout作为布局的形式,使用BorderLayout进行简单的布局,使用FlowLayout作为水平图标/按钮的数量,两者之间有一些空格。 Netbeans也是一个很好的GUI构建器,可以避免大量繁琐的布局编码来节省您的时间。

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

我厌倦了那些需要很多设置的布局管理员,不是很容易阅读或用手工做的,所以我写了自己非常简单的laoutmanager,它使用两个光电传感器的抽象来保持每个组件的位置。您可以像这样添加组件: parent.add(child," topleft(0,0.5)bottomright(0.5,1.0)");

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top