无论监视器分辨率如何,如何设置JFrame居中显示?[关闭]


197

使用Java时,我发现启动应用程序时很难将主窗口放置在屏幕中央。

有什么办法可以做到吗?它不必垂直居中,水平对齐对我来说是更重要的目标。但是也欢迎垂直对齐。

Answers:


232

我总是这样做:

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2);

thisJFrame涉及哪里?


1
我知道这个答案确实很老,但是有没有可能在静态环境中做到这一点?我决定要为此而努力还是只是出于任何原因想要使用的公共静态void main(String [] args)删除。
2xedo

14
这将在单个监视器设置中起作用,但对于双监视器,它可能会出现跨两个监视器的情况(假设它们具有相同的分辨率)。setLocationRelativeTo(null)即使在多显示器设置中,使用也会将其放在主显示器上。
Rangi Keen 2015年

1
请记住,在居中之前必须将JFrame设置为可见。
猎人S

4
@HunterS:这是不正确的。实际上,建议您在居中后才将其设置为可见。这样,它就不会出现然后跳来跳去。只要您在此答案中的代码之前包装好框架或设置尺寸,就可以了。
Erick Robertson

520

setLocationRelativeTo(null)

传递给时,此方法会有特殊效果null。根据Javadoc:

如果该组件为null,或者与此组件关联的GraphicsConfiguration为null,则将该窗口置于屏幕的中央。

这应该在设置大小或调用后完成 pack(),但在将其设置为可见之前完成,如下所示:

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

102
如果使用pack()方法,则+1,setLocationRelativeTo应在pack()方法调用后使用
Ravindra Gullapalli

6
@Imray,因为它可能不适用于双监视器配置。:P
Ankit

17
似乎应该在之后调用该方法.setSize()
卡米尔

6
这在多显示器设置中有效,并且如注释中所述,如果必须调用,则必须在pack()和setSize()之后调用它们。
Paul Gregoire 2014年

2
@Ankit与我的双显示器设置完美配合。OP始终选择“最佳”答案。
肯特


29

只需单击表单并转到JFrame属性,然后单击“代码”选项卡并选中Generate Center

在此处输入图片说明


我从未想过。无论如何,单击此按钮后...后面的代码如何工作?@HenkVanBoeijen
gumuruh

11

就这么简单...

setSize(220, 400);
setLocationRelativeTo(null);  

或者如果您使用框架,则将框架设置为

frame.setSize(220, 400);
frame.setLocationRelativeTo(null);  

为了澄清,从docs

如果该组件为null,或者与此组件关联的GraphicsConfiguration为null,则将该窗口置于屏幕的中央。


7

我将NetBeans IDE 7.2.1用作开发人员环境,并且可以在其中配置JForm属性。

在“ JForm属性”中,转到“代码”选项卡并配置“生成中心”。您需要先将“表单大小策略”设置为“生成调整大小代码”。


6

我正在使用NetBeans IDE 7.3,这就是集中JFrame的方式。请确保单击JFrame面板,然后转到JFrame属性栏,单击代码栏,然后选择Generate Center复选框。


2

如果使用NetBeans,只需在设计视图上单击框架,然后在其属性上单击“代码”选项卡。接下来,选中“生成中心”。这样就可以完成工作。


1

如果您明确指定setPreferredSize(new Dimension(X, Y));,则最好使用:

setLocation(dim.width/2-this.getPreferredSize().width/2, dim.height/2-this.getPreferredSize().height/2);


1

您可以使用此方法,该方法允许JFrame同时居中和全屏显示。

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

0

在净豆GUI -转到JFrame的(点击右键的JFrame在导航)特性,在代码窗体大小政策属性选择生成调整大小代码。在同一窗口中,取消勾选生成位置,然后勾选生成大小和中心

享受编程。拉玛那

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.