无论显示器分辨率如何,如何将JFrame设置为居中显示?

Ama*_*mer 188 java swing position jframe

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

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

JRL*_*JRL 505

使用 setLocationRelativeTo(null)

传递它时,此方法具有特殊效果null.根据Javadoc:

如果组件为null,或者与此组件关联的GraphicsConfiguration为null,则窗口将放置在屏幕的中心.

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

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

  • 如果使用pack()方法+1,则应在pack()方法调用之后使用`setLocationRelativeTo` (101认同)
  • 看起来应该在`.setSize()`之后调用该方法. (17认同)
  • @Imray因为它可能不适用于双显示器配置.:P (6认同)
  • 这适用于多监视器设置,如注释中所述,必须在pack()和setSize()之后调用它们,如果它们被调用的话. (6认同)
  • @Ankit它与我的双显示器设置完美配合.OP最好选择"最佳"答案. (2认同)

Jac*_*ack 221

我总是这样做:

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2);
Run Code Online (Sandbox Code Playgroud)

this涉及的JFrame 在哪里.

  • 这将在单个监视器设置中工作,但是对于双监视器,它可能看起来跨越两个(假设它们是相同的分辨率).即使在多显示器设置中,使用`setLocationRelativeTo(null)`也会将其置于主监视器上. (13认同)
  • @HunterS:这是不正确的.事实上,建议在将它居中之后才能将其设置为可见.这样它就不会出现然后跳转.只要您在此答案的代码之前打包框架或设置尺寸,您就可以了. (4认同)
  • 请记住,在居中之前必须将 JFrame 设置为可见。 (2认同)

Gre*_*reg 53

你可以打电话JFrame.setLocationRelativeTo(null)给窗口居中.一定要把它放在前面JFrame.setVisible(true)

  • 如果使用pack()方法+1,则应在pack()方法调用之后使用`setLocationRelativeTo` (20认同)

小智 27

只需单击表单,然后转到JFrame属性,然后转到代码选项卡并检查Generate Center.

在此输入图像描述


小智 11

这很简单......

setSize(220, 400);
setLocationRelativeTo(null);  
Run Code Online (Sandbox Code Playgroud)

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

frame.setSize(220, 400);
frame.setLocationRelativeTo(null);  
Run Code Online (Sandbox Code Playgroud)

有关澄清,请参阅以下文档:

如果组件为null,或者与此组件关联的GraphicsConfiguration为null,则窗口将放置在屏幕的中心.


Asa*_*gen 7

我使用NetBeans IDE 7.2.1作为我的开发人员环境,您可以选择配置JForm属性.

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


小智 6

我正在使用NetBeans IDE 7.3,这就是我如何集中我的JFrame确保单击JFrame面板并转到JFrame属性栏,单击代码栏并选择Generate Center复选框.