使用双屏幕时,在主显示器上显示JFrame

时间:2012-05-21 19:05:46

标签: java swing screen

我正在尝试编写一些代码,使用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平台。

搜索这个问题给了我很多上面的例子,但是没有任何东西可以告诉我如何做我想做的事,任何帮助都会受到赞赏。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

frame.setLocationRelativeTo(null);

应该有效(doc)。至少它在我的多显示器设置上。请注意,即使从辅助监视器启动应用程序,窗口也始终显示在主监视器的中央。

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

如果要在特定监视器中显示,请参阅Show JFrame in a specific screen in dual monitor configuration