3

我正在尝试编写一些代码以使用 Java 将我的主应用程序 JFrame 置于计算机屏幕的中心。为此,我使用下面的代码,它将过程分为两部分,这只是因为我在类的其他地方使用 ScreenHeight 和 ScreenWidth 进行缩放,它们是类的属性。

这段代码在我的笔记本电脑和其他单屏机器上完美运行,但在我的双显示器主机上,它将屏幕放在工作区的中心,每个屏幕上都有一半的对话框(可能很小) . 它在一个方法中,因此我可以在每次对话框大小由程序更改时调用它。

我使用布尔 Width 值将屏幕保持在垂直轴上的同一位置,但将其置于水平轴上。

// 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 平台。

搜索这个问题给了我很多上面的例子,但没有告诉我如何做我想做的事,任何帮助将不胜感激。

提前感谢您的帮助。

4

1 回答 1

3
frame.setLocationRelativeTo(null);

应该工作(文档)。至少在我的多显示器设置中是这样。请注意,窗口始终显示在主监视器的中心,即使应用程序是从辅助监视器启动的。

您可以使用GraphicsEnvironment.getCenterPoint来找到中心点,而不是自己计算。

如果要在特定显示器中显示,请参阅在双显示器配置中的特定屏幕中显示 JFrame

于 2012-05-21T19:11:24.277 回答