我正在尝试编写一些代码,使用Java将我的主应用程序JFrame集中在计算机屏幕的中心。要做到这一点,我使用下面的代码,它将过程分为两部分,这只是因为我在类的其他地方使用ScreenHeight和ScreenWidth进行缩放,它们是类的属性。
这段代码可以在我的笔记本电脑和其他单屏机器上完美运行,但是在我的主机上,它是双显示器,它将屏幕放在工作区的中心,放置一半对话框(可以很小)在每个屏幕上。这是一种方法,所以我可以在每次对话框大小时调用它,由程序更改。
我使用布尔宽度值将屏幕保持在垂直轴上的相同位置,但将其居中放在水平轴上。
// Finds the size of the screen
private void find_ScreenSize() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension dim = toolkit.getScreenSize();
ScreenHeight = dim.height;
ScreenWidth = dim.width;
}
// Centres the dialogue box within the screen
private void centre_Frame(JFrame Frame, boolean Width) {
find_ScreenSize();
if (!Width) { // if you are not justifying on the X axis
Frame.setLocation(Frame.getLocationOnScreen().x,
((ScreenWidth / 2) - (Frame.getWidth() / 2)));
} else {
Frame.setLocation(((ScreenWidth / 2) - (Frame.getWidth() / 2)),
((ScreenHeight / 2) - (Frame.getHeight() / 2)));
}
}
我希望能够将对话框置于任何多屏幕计算机的主/第一屏幕中央。我的应用程序中的对话框,我不控制位置,设法做我想做的事情,例如我的JOptionPane和文件打开和保存对话都完美无缺。
我正在Linux上开发,但该应用程序适用于Linux和MS平台。
搜索这个问题给了我很多上面的例子,但是没有任何东西可以告诉我如何做我想做的事,任何帮助都会受到赞赏。
提前感谢您的帮助。
答案 0 :(得分:3)
frame.setLocationRelativeTo(null);
应该有效(doc)。至少它在我的多显示器设置上。请注意,即使从辅助监视器启动应用程序,窗口也始终显示在主监视器的中央。
您可以使用GraphicsEnvironment.getCenterPoint查找中心点,而不是自己计算。
如果要在特定监视器中显示,请参阅Show JFrame in a specific screen in dual monitor configuration