布局管理器可自由放置您的对象

Layout Manger to Freely place your objects

我是一名自学成才的 java 开发人员,我使用 IntelliJ IDEA Java。最近我在 youtube 上看到一个视频,其中那个人正在使用 NetBeans 和他的 JFrame 形式,他能够自由地放置他的对象,如 JButton、JTextFeild、JLabel 等。我不知道该怎么做。在 IntelliJ IDEA 中,我找到了几个布局管理器,例如 Border、Card、Grid、Bag 等,但其中 none 个给出了预期的结果。有人可以告诉我如何获得一个布局管理器,我可以在其中自由放置所有对象并自由调整它们的大小而不受任何限制?提前感谢您的帮助。

摆动每个组件extends Container。这意味着每个组件都可以有嵌套组件(它们都有 add(Component) 方法)。但是,并不是所有的组件都支持嵌套组件layout-ing。

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

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

这些组件都是 windows(JFrameJDialog 等...)和 JPanel。还有其他一些支持 layout-ing 特定类型的嵌套组件。例如 JMenu 能够正确显示 JMenuItems。

现在,这些“top-level”/空容器是 using Layout Managers,以便 align-show 它们的嵌套组件。基于容器的布局管理器,显示组件。

这就是为什么您不能“随意”将组件放入 JFrame 中的原因。因为它的布局管理器负责组件的放置。所以,您正在寻找的是将其 LayoutManager(使用 setLayout 方法)更改为允许您自由放置组件的 LayoutManager。

你猜怎么着?没有这样的布局管理器。仅仅是因为,它与 do/calculate 无关,因为您正在处理组件的布局。所以,要想实现“自由”的组件布局,就必须使用jframe.setLayout(null);。为了在它之后布局组件,你必须使用 componentInsideJFrame.setBounds(...) 并给它常量坐标/维度。

这是不好的做法。就 UI 而言,这是一个非常糟糕的问题。给组件静态坐标和尺寸是不好的。有些问题你必须问自己。

如果用户调整 window 的大小怎么办?如果 window 是 301x301,它的中心在 (150,150)。所以你在 (150,150) 处放置了一个组件。好的,它有效。现在用户调整 window 的大小并使其成为 501x501。中心现在位于 (250,250)。但是组件停留在 (150,150)。有 setResizable(false) 解决此类问题的方法,但您多久使用一次“无法调整大小”的应用程序?如果用户想调整它的大小怎么办?

希望你能明白我想说的意思。

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

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

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

最后,我建议你把整个“gui-builder-tool”的东西放在外面。它们似乎可以帮助您构建 GUI,但它们添加了太多 additional/useless 代码,而且大多数时候它们容易出现“糟糕的 UI 创作”。尝试自己编码GUI。

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