Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JFrame与pack()组合在一起_Java_Swing_Jframe_Window_Pack - Fatal编程技术网

Java 将JFrame与pack()组合在一起

Java 将JFrame与pack()组合在一起,java,swing,jframe,window,pack,Java,Swing,Jframe,Window,Pack,我试着将一个JFrame放在中间,我以前是pack(),我得到了它,但我认为它不是干净的方式。 我就是这样做的: JFrame window = new JFrame(); //filling //window //with //stuff window.pack(); Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); int x = (dim.width - window.getPreferredSize().widt

我试着将一个
JFrame
放在中间,我以前是
pack()
,我得到了它,但我认为它不是干净的方式。 我就是这样做的:

JFrame window = new JFrame();

//filling
//window
//with
//stuff

window.pack();
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int x = (dim.width - window.getPreferredSize().width) / 2, y = (dim.height - window.getPreferredSize().height) / 2;
window.setBounds(x, y, window.getPreferredSize().width, window.getPreferredSize().height);
填充后我将其打包以获得最终的
首选大小
,因此我可以在
setBounds
方法中使用这些值。但我不喜欢打包后反弹


有更好的主意吗?

要在屏幕上居中显示窗口,您需要在调用后立即调用
窗口。将LocationRelativeTo(null)
设置为在显示窗口之前:

JFrame window = new JFrame();
...

window.pack();
window.setLocationRelativeTo(null);
window.setVisible(true);
根据文件:

设置窗口相对于指定构件的位置 根据以下场景

下面提到的目标屏幕是窗口所指向的屏幕 应放在调用
setLocationRelativeTo
方法之后

  • 如果组件为
    null
    ,或与此组件关联的
    图形配置
    组件为
    null
    ,窗口位于 屏幕。中心点可通过以下方法获得:
    GraphicsEnvironment.getCenterPoint
    方法

另一方面
一些开发人员可能建议您使用而不是
setLocationRelativeTo(…)
,以尊重运行桌面应用程序的平台的本机窗口系统的默认位置。这很有意义,因为您的应用程序必须设计为在具有不同窗口系统和s的不同平台上运行。

请参见。我也是这样做的,我对一个好的解决方案非常感兴趣!我不知道“空”是“屏幕中间”的同义词非常感谢,这就是我要找的!
public void setLocationRelativeTo(Component c)