在编写JFrame程序时多次遇到该问题,也阅读了一些文章,在这篇文章中做个总结。
- 调用 java.awt.Window.setLocationRelativeTo(Component c)
相比通过计算屏幕大小设置窗体位置的方法,调用setLocationRelativeTo()方法更加简单
但是有一个点需要注意,即该方法与setSIze()的位置:
//采用这种写法,会导致
//窗体处于屏幕右下角
//不是我们想要的结果
setLocationRelativeTo(null);
setSize(600, 410);
//改变两个语句的顺序
//窗体(的对角线交点)位于屏幕的中心
setSize(600, 410);
setLocationRelativeTo(null);
显然第二种写法是我们所期望的。
第一种写法错误的原因是:setLocationRelativeTo()中需要根据当前窗体大小来计算其位置,所以在没有设置窗体大小的情况下,该方法会按照默认的WindowSize来计算,导致最终窗体的偏移。如果还不能够完全理解,可以在该方法处右键Open Declaration阅读代码。
- 通过计算屏幕大小设置窗体位置
也附上以前的计算方法:
frame.setSize(frameWidth,frameHeight);
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenWidth = screenSize.getWidth();
int screenHeight = screenSize.getHeight();
frame.setLocation(screenWidth/2-frameWidth/2, screenHeight/2-frameHeight/2);
同样,也要注意setSize()和setLocation()的顺序问题。