Java 您使用哪种布局管理器?

Java 您使用哪种布局管理器?,java,swing,layout,Java,Swing,Layout,每个人都使用什么java GUI布局管理器?最近,我一直在使用,它有一些强大的组件控件。我只是想看看除了标准的JDK之外,其他开发人员在使用什么。它是为作为netbeans一部分的尾数gui构建器开发的。我上一次使用的Swing应用程序。是可用的。一旦你习惯了使用它,它就会非常有效。我认为标准的JDK布局管理器本身非常强大。另外,您还可以最大限度地减少对第三方库的依赖。我使用。它似乎需要很多代码,但它的布局非常好看 我还喜欢与GridBagLayout面板结合使用,以实现出色的可定制性。我也使用

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

它是为作为netbeans一部分的尾数gui构建器开发的。

我上一次使用的Swing应用程序。

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

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


我还喜欢与GridBagLayout面板结合使用,以实现出色的可定制性。

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

我非常喜欢使用而不是GridBagLayout。每件事都有道理,但每次我尝试使用GridBagLayout时,它都会压碎我的灵魂。

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

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

参见

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

一定要看看JGoodie实现“dumb”视图的PresentationModel方法。我将此技术用于GUI构建器(我将GroupLayout与Jigloo GUI构建器插件一起使用),以摆脱快速原型。经过3或4次迭代后,通常会退出窗口,我们使用MiG或FormLayout重新实现


编辑:自从我写了这篇文章之后,我已经开始在我的所有布局中使用MiG,我不再使用GUI生成器——使用MiG布局太容易了。

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

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

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

我开始使用各种嵌套布局,然后转向GridBagLayout(这非常令人沮丧)。从那时起,我尝试了FormLayout(但发现它只适用于表单),并坚定地使用TableLayout,总的来说,我非常满意它

从那以后,我发现了MiGLayout,虽然我除了玩它没有做更多的事情,但它似乎非常有能力,非常类似于TableLayout,可能更干净一些

对我来说最大的好处是MiGLayout将成为JDK的一部分,所以当它成为JDK的一部分时,我打算只使用它


另一件需要记住的事情是,无论您选择哪种重量级的布局管理器,对于一些简单的布局管理器(如GridLayout),总有一个位置。我见过GridBagLayout做过一些可怕的事情,如果有一个更简单的布局管理器,这些事情本可以更容易地完成。

我在嵌套时使用了90%的时间,

我是一个Java新手。 我尝试了GridBagLayout,放弃了,然后尝试了BoxLayout,然后放弃了,然后做了我自己的。有了GridBag和Box,我做出了最好的猜测,布局引擎决定做一些不同的事情,没有任何明显的方法来调试它们。 通过我的自定义布局,我可以打印出坐标、宽度和高度,以找出哪里出了问题。放置东西有点数学化,但是您可以使用java的全部功能,而不是内置布局管理器的有限词汇表。
当然,这只是一个家庭项目,你永远不会被允许在工作中这样做。

我过去常常选择GridBagLayout作为控件,但由于java1.6,我将使用GroupLayout这是一个非常糟糕的方法

这里有一个屏幕截图和使用它的示例代码

我使用的大多数面板

对于少数
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进行表单式布局,使用BorderLayout进行简单布局,使用FlowLayout进行表单式布局
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);
    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();