Java 布局管理器,可自由放置对象

Java 布局管理器,可自由放置对象,java,swing,layout-manager,Java,Swing,Layout Manager,我是一名自学成才的java开发人员,我使用IntelliJ IDEA for java。最近,我在youtube上看到一个视频,其中一个家伙在使用NetBeans,并且以JFrame的形式,他能够自由地放置他的对象,如JButton、JTextFeild、JLabel等。我不知道如何做到这一点。在IntelliJ IDEA中,我找到了几个布局管理器,如边框、卡片、网格、包等,但没有一个给出预期的结果。有谁能告诉我,我如何才能得到一个布局管理器,我可以自由地放置我的所有对象,也可以自由调整它们的大

我是一名自学成才的java开发人员,我使用IntelliJ IDEA for java。最近,我在youtube上看到一个视频,其中一个家伙在使用NetBeans,并且以JFrame的形式,他能够自由地放置他的对象,如JButton、JTextFeild、JLabel等。我不知道如何做到这一点。在IntelliJ IDEA中,我找到了几个布局管理器,如边框、卡片、网格、包等,但没有一个给出预期的结果。有谁能告诉我,我如何才能得到一个布局管理器,我可以自由地放置我的所有对象,也可以自由调整它们的大小没有任何限制?提前感谢您的帮助。

在swing中,每个组件
都扩展了容器。这意味着每个组件都可以有嵌套组件(它们都有
add(component)
method)。但是,并非所有组件都支持嵌套组件的布局

我想说的是,您可以将组件添加到
JButton
,但是
JButton
不能显示其嵌套组件

因此,为了进行嵌套,我们使用组件-支持其嵌套组件方向的容器

这些组件都是windows(
JFrame
JDialog
等)和
JPanel
s。还有一些其他组件支持对特定类型的嵌套组件进行布局。例如,
JMenu
能够正确显示
JMenuItem
s

现在,这些“顶级”/“空容器”正在对齐以显示其嵌套组件。根据容器的布局管理器,将显示组件

这就是为什么不能“自由”地将组件放入
JFrame
。因为它的布局管理器正在处理将要放置的组件。因此,您需要的是将其LayoutManager(使用
setLayout
方法)更改为允许您自由放置组件的方法

你猜怎么着?没有这样的布局管理器。原因很简单,因为您负责组件的布局,所以它将不需要做任何事情/计算。因此,为了实现“自由”组件布局,必须使用
jframe.setLayout(null)。为了在它之后布局组件,您必须使用
componentInsideJFrame.setBounds(…)
并为其提供恒定的坐标/尺寸

这是个坏习惯。一个非常糟糕的界面。给组件提供静态坐标和尺寸是错误的。你必须问自己一些问题

如果用户调整窗口大小怎么办?如果窗口为
301x301
,则其中心位于
(150150)
。因此,将组件放置在
(150150)
处。好的,它起作用了。现在,用户调整窗口大小并使其
501x501
。中心现在位于
(250250)
。但组件仍停留在
(150150)
。对于这类问题,有
setresizeable(false)
的解决方案,但是您使用“无法调整大小”应用程序的频率有多高?如果用户想要调整它的大小呢

我希望你能理解我的意思

通过使用布局管理器,您可以轻松解决此类问题,因为布局管理器将负责调整大小和计算新中心

对。我知道这感觉很奇怪,但所有这些youtube教程都没有教你制作Swing GUI的正确方法。(我想这是另一天的谈话)

我真诚地建议您阅读Swing文档的教程,以便了解布局管理器的工作原理。你会从中受益匪浅

最后,我建议您将整个“gui构建器工具”的事情放在外面。它们似乎可以帮助您构建GUI,但它们添加了太多额外/无用的代码,而且大多数情况下,它们很容易“创建糟糕的UI”。尝试自己编写GUI


起初,这听起来有点苛刻,但您始终可以运行应用程序并查看GUI的结果。在犯了一些错误之后,您最终可以通过只看到
container.setLayout(…)
container.add(…)
行来想象GUI结果。

您在youtube视频中看到的可能是Swing GUI设计器(我认为NetBeans确实有一个)。但是要学习JavaSwing,您不应该使用GUI设计器。学习和编写好的、可维护的Swing代码的最好方法是自己动手。这应该是一个很好的起点,教你所有需要的基础知识。“自学..在youtube上观看视频”youtube视频不是学习编程的方法。访问教程中的教程,学习如何使用布局管理器。你看到的那个“拖放”视频是在教坏习惯。正如其他人所建议的,你可以使用setLayout(null)或一个包含null布局的容器的JScrollPane。正如我所建议的,使用布局管理器是一种很好的做法,这样你的框架在调整尺寸时可以正确地重新绘制感谢你为回答我的问题所付出的所有时间和努力,我真的非常感谢你的努力,非常感谢。你能看看这段视频,告诉我他是如何做到这一点的,这是一种很好的做法吗?我看视频的那个家伙也使用了一些外部软件: