检测哪个监视器显示窗口

发布于 2024-07-12 03:09:12 字数 355 浏览 13 评论 0原文

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

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

我试图找到一种方法

Toolkit.getDefaultToolkit()

,但未能找到一些东西。

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

Java 版本 1.4 Windows XP

谢谢

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.

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.

I try to find a method in

Toolkit.getDefaultToolkit()

but was not able to find someting.

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

Java-Version 1.4
Windows XP

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

琉璃繁缕 2024-07-19 03:09:13

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

对于AWT

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

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

这只是我原始代码的一个片段。 你应该问返回值是否不为空,就像这样!

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

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

For AWT:

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
}

For SWT:

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;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文