检测哪个监视器显示窗口

时间:2009-01-16 10:56:09

标签: java windows jframe toolkit multiple-monitors

我有主应用程序JFrame窗口,它可以包含不同的组件。当用户选择可编辑的文本字段时,我打开一个自己实现的OnScreenKeyboard。 OSK也是一个JFrame窗口。

当用户将主窗口拖动到另一台显示器时,OSK也应显示在同一台显示器上。为此,我必须检测监视器,显示主JFrame。

我试着在

中找到一个方法
Toolkit.getDefaultToolkit()

但无法找到某些东西。

您知道我如何检测显示JFrame的显示器吗?

Java-Version 1.4 Windows XP

由于

1 个答案:

答案 0 :(得分:5)

如果所有可用监视器的解决方案都相同,请回答。

AWT

每个Control都有getMonitor()方法,屏幕位置get可以从中计算出来:

Monitor widgetMonitor = mTextWidget.getMonitor();
Rectangle monitorRect = widgetMonitor.getBounds();

if(monitorRect.x < 0){
   // shown in left monitor, starting from the main monitor
}

if(monitorRect.x > monitorRect.width){
   // shown in right monitor, starting from the main monitor
}

SWT

这只是我的原始代码的一部分。你应该问一下返回值是否为null这样的东西!

    int monitorWidth = 0;
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] screenDevices = ge.getScreenDevices();
    if(screenDevices.length > 0){
        monitorWidth = screenDevices[0].getDisplayMode().getWidth();
    }


    Point ownerLocationOnScreen = owner.getLocationOnScreen();

    int screenMovingX = 0;
    if(ownerLocationOnScreen.x < 0){
        screenMovingX = -monitorWidth;
    }
    if(ownerLocationOnScreen.x > monitorWidth){
        screenMovingX = monitorWidth;
    }