我正在尝试将屏幕定位在屏幕中央,我知道此代码必须正常运行:
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((screen.getWidth() - getWidth()) /2);
int y = (int) ((screen.getHeight() -getHeight()) /2);
setLocation(x, y);
或者这个:
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension screenSize = tk.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
setSize(screenWidth / 2, screenHeight / 2);
setLocation(screenWidth / 4, screenHeight / 4);
我已经尝试了所有可能的代码,但我不知道为什么它们不起作用,只是将框架移动到屏幕的右下角我已经使用setRelative为null但是再次它不起作用。
我最终可以通过将宽度乘以5并将其除以某个东西来将框架非常靠近中心,但我知道这不是正确的方法。
有人可以向我解释一下可能出现的问题吗?
问题已修复:
溶液: 我找到了自己最好的方法,如果你想出同样的问题,只需让netbeans通过转到属性并检查生成中心自动完成,忘记愚蠢的代码。
答案 0 :(得分:13)
在主屏幕上居中框架的最简单方法(如果你有多个屏幕,则有选项)是使用setLocationRelativeTo(...)frame方法,并将null作为参数:
JFrame frame = new JFrame ();
frame.setSize ( 500, 300 );
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );
如果不起作用 - 试试这个(直接坐标):
Dimension ss = Toolkit.getDefaultToolkit ().getScreenSize ();
Dimension frameSize = new Dimension ( 500, 300 );
JFrame frame = new JFrame ();
frame.setBounds ( ss.width / 2 - frameSize.width / 2,
ss.height / 2 - frameSize.height / 2,
frameSize.width, frameSize.height );
frame.setVisible ( true );
最后和“终极”示例 - 它将显示每个可用系统屏幕的中心帧:
public static void main ( String[] args )
{
Dimension frameSize = new Dimension ( 500, 300 );
for ( GraphicsDevice screen : getGraphicsDevices () )
{
GraphicsConfiguration gc = screen.getDefaultConfiguration ();
Rectangle sb = gc.getBounds ();
JFrame frame = new JFrame ( gc );
frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
frame.setBounds ( sb.x + sb.width / 2 - frameSize.width / 2,
sb.y + sb.height / 2 - frameSize.height / 2, frameSize.width,
frameSize.height );
frame.setVisible ( true );
}
}
public static List<GraphicsDevice> getGraphicsDevices ()
{
List<GraphicsDevice> devices = new ArrayList<GraphicsDevice> ();
for ( GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment ()
.getScreenDevices () )
{
if ( gd.getType () == GraphicsDevice.TYPE_RASTER_SCREEN )
{
if ( gd == GraphicsEnvironment.getLocalGraphicsEnvironment ()
.getDefaultScreenDevice () )
{
devices.add ( 0, gd );
}
else
{
devices.add ( gd );
}
}
}
return devices;
}
答案 1 :(得分:6)
如果您使用
就足够了setLocationRelativeTo(null);
根据Javadoc for java.awt.Window.setLocationRelativeTo(),
如果组件为空,...窗口位于屏幕中央。
答案 2 :(得分:3)
我已经尝试过了,它没有用,netbeans有什么问题吗?
netbeans可能没有错误
我正在尝试将我的帧定位在屏幕中央
你可以尝试
JFrame frame = new JFrame ();
frame.pack(); // or frame.setSize(int, int);
frame.setLocationByPlatform(true);
frame.setVisible(true);
答案 3 :(得分:2)
在设置JFrame的大小之前,我会向你设置相对于null的位置/通过x和y坐标设置位置的甜甜圈投注美元。如果尚未设置大小,则将其视为0x0,将其死点设置为屏幕中心。如果您随后更改了尺寸,则会将其留在原位(屏幕中心),并将其缩放到屏幕的右下角。
换句话说,make setSize()在将它居中放在屏幕上之前就会出现。
你做的其他事情对我来说都很好。