java形式的未修饰jframe中的Java相对定位swing组件

Posted

技术标签:

【中文标题】java形式的未修饰jframe中的Java相对定位swing组件【英文标题】:Java relative positioning swing components in an undecorated jframe in java form 【发布时间】:2014-04-02 11:30:50 【问题描述】:

我需要创建一个全屏打开的登录界面(在所有显示分辨率下工作)但未修饰(true)。 我可以创建预期的 jframe,但是如何将摆动组件定位在 jframe 的中心? 这是我需要得到的 https://drive.google.com/file/d/0B3-1tpHz8_TGU1p3SlA2UGMxekk/edit?usp=sharing 这适用于所有屏幕尺寸

【问题讨论】:

为此使用 BorderLayout 并将对齐分配给 Swing 组件的 CENTER。 @NadunLiyanage 与此问题完全无关,您在我回答之前删除了您最近的问题。将容器背景设置为 null 以恢复为继承的默认值。很抱歉劫持了这个问题。 非常感谢 Jason 先生...我做了您所说的同样的事情...它再次工作非常感谢您的反馈...对于给您带来的不便,我深表歉意。 .. 【参考方案1】:

未装饰的框架仍然是框架。事实上,您可以简单地使用JWindow

这意味着,无论是否经过装饰,您都可以照常布置组件。因为你推动全屏,我可能会建议使用像 GridBagLayout 这样的东西作为基础,但那是我。

【讨论】:

感谢您的快速回复...我是 Java 新手,我认为问题不清楚...这是我需要做的事情。 drive.google.com/file/d/0B3-1tpHz8_TGU1p3SlA2UGMxekk/… ![在此处输入图片描述][1] 是的,而且。对于 GridBagLayout 来说,这似乎很简单【参考方案2】:

使用 setBounds() 方法

setLayout(null);
setBounds(int x,int y,int width,int height);

setBounds() 方法会将组件放置在 JFrame 窗口的所需位置。

【讨论】:

在 15 年的专业 Swing 开发中,我从未找到使用 null 布局的理由,考虑到字体指标、dpi 和其他平台之间的渲染差异问题,这使得这变得异常困难且容易出错解决方案 - 只是说 “使用 setBounds() 方法” ..当然,除非你想要一个可靠且健壮的 GUI。 Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。要为强大的 GUI 组织组件,请改用布局管理器或 combinations of them,以及 white space 的布局填充和边框。 感谢您的指导。【参考方案3】:

使用边框布局,此布局将帮助您将组件分配到中心。

例如:`

Frame.add(GuiFieldsPanel, BorderLayout.CENTER);

或者

Frame.add(GuiButtonsPanel, BorderLayout.CENTER);        
Frame.setVisible(true);

【讨论】:

在您的第二行中,GuiButtonsPanel 将在 BorderLayout.CENTER 位置替换 GuiFieldsPanelBorderLayout 可以在每个位置仅布置一个组件。 NorderLayout 将只允许单个组件占据其 5 个可用位置中的任何一个,这意味着,您不能让两个组件占据 CENTER 位置 哦..抱歉有错误。我会更正答案..感谢您的建议。

以上是关于java形式的未修饰jframe中的Java相对定位swing组件的主要内容,如果未能解决你的问题,请参考以下文章

java中如何在jframe标题栏中添加按钮

java - 如何在Java文件中指定相对文件路径,以便将文件放入jar文件后仍然可以工作?

全屏Java中的JFrame

将JFrame对象类作为值传递给java中的HashMap

Java中的JPanel与JFrame

Java中的static