你使用哪种布局管理器?

Sha*_*wnD 18 java layout swing

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

Rui*_*ira 17

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

  • 这个答案有点快.我们期待理由,利弊...... (6认同)

Jay*_* R. 9

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


Kev*_*Day 7

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

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

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


小智 5

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


jjn*_*guy 5

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

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


adu*_*dum 5

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


Osc*_*Ryz 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 ) );
    }
Run Code Online (Sandbox Code Playgroud)


jfp*_*ret 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);
Run Code Online (Sandbox Code Playgroud)

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

另外,我发现DesignGridLayout有一些独特的功能(例如它的" 智能垂直调整大小 ").