检测哪个监视器显示窗口 [英] Detect which monitor shows the Window

查看:90
本文介绍了检测哪个监视器显示窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I do have main application JFrame window which can include different components. I open a self implemented OnScreenKeyboard when the user select a editable textfield. The OSK is also a JFrame window.

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

When the user drag the main window to another monitor, the OSK should also be shown on the same monitor. For this i have to detect the monitor the main JFrame is shown.

我尝试在

Toolkit.getDefaultToolkit()

但找不到东西.

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

Do you know how i can detect the monitor where a JFrame is shown?

Java版本1.4 Windows XP

Java-Version 1.4 Windows XP

谢谢

推荐答案

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

Answer, if the solution of all available monitors are the same.

对于 AWT :

每个控件都具有方法getMonitor(),可从该方法计算屏幕位置:

Every Control does have the method getMonitor() from which the screen position get can calculated from like:

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或类似的东西!

It is just a snip at my origial code. you should ask if return values are not null ans something like this!

    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;
    }

这篇关于检测哪个监视器显示窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆