如何解决布局管理器,可自由放置对象
我是一名自学成才的Java开发人员,并且使用IntelliJ IDEA for Java。最近,我在youtube上观看了一个视频,其中那个家伙正在使用NetBeans,并且以他的JFrame形式,他能够自由放置他的对象,如JButton,JTextFeild,JLabel等。我不知道该怎么做。在IntelliJ IDEA中,我发现了几个布局管理器,例如Border,Card,Grid,Bag等,但是它们都不给人期望的结果。有人可以告诉我如何获得一个布局管理器,在其中我可以自由放置所有对象,还可以自由地调整它们的大小而没有任何限制?预先感谢您的帮助。
解决方法
摇摆每个组件extends Container
。这意味着每个组件都可以具有嵌套的组件(它们都具有add(Component)
方法)。但是,并非所有人都支持嵌套组件的布局。
我想说的是,您可以向JButton
添加一个组件,但是JButton
不能显示其嵌套的组件。
因此,为了进行嵌套,我们使用组件-支持其嵌套组件方向的容器。
这些组件都是窗口(JFrame
,JDialog
等)和JPanel
。还有其他一些支持对特定类型的嵌套组件进行布局。例如,JMenu
能够正确显示JMenuItem
。
现在,这些“顶级” /空容器是using Layout Managers,以便对齐显示其嵌套组件。基于容器的布局管理器,显示了组件。
这就是为什么您不能“自由地”将组件放入JFrame
中的原因。因为它的布局管理器正在照顾要放置的组件。因此,您要寻找的是将其LayoutManager(使用setLayout
方法)更改为可自由放置组件的控件。
猜猜是什么?没有这样的布局管理器。仅仅是因为,因为您要注意组件的布局,所以它不需要执行/计算。因此,为了获得“自由”的组件布局,必须使用jframe.setLayout(null);
。为了在其后布局组件,您将必须使用componentInsideJFrame.setBounds(...)
并为其赋予恒定的坐标/尺寸。
这是不好的做法。当涉及到UI时,这是非常糟糕的。提供组件的静态坐标和尺寸是不好的。您必须问自己一些问题。
如果用户调整窗口大小会怎样?如果窗口为301x301
,则其中心位于(150,150)
。因此,您将组件放置在(150,150)
处。好的,可以。现在,用户调整窗口大小并将其设置为501x501
。中心现在位于(250,250)
。但是组件停留在(150,150)
处。 setResizable(false)
可以解决此类问题,但是您多久使用一次“无法调整大小”应用程序?如果用户想要调整大小,该怎么办?
希望您能理解我要说的话。
通过使用布局管理器,您可以轻松解决此类问题,因为布局管理器将负责调整大小并计算新的中心。
是的。我知道这很奇怪,但是所有这些youtube教程都没有教给您制作Swing GUI的正确方法。 (我想这是另一天的对话)
我真的建议您阅读Swing文档的教程,以了解布局管理器的工作原理。您将真正从中受益。
最后,我建议您将整个“ gui-builder-tool”一词排除在外。它们似乎可以帮助您构建GUI,但是它们添加了很多其他/无用的代码,并且大多数情况下它们倾向于“不良的UI创建”。尝试自己编写GUI。
起初,这听起来有些刺耳,但是您始终可以运行应用程序并查看GUI的结果。经过一些错误后,您最终将仅能看到container.setLayout(..)
和container.add(...)
行就能想象GUI的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。