Java 检测显示窗口的监视器

Java 检测显示窗口的监视器,java,windows,jframe,toolkit,multiple-monitors,Java,Windows,Jframe,Toolkit,Multiple Monitors,我有主应用程序JFrame窗口,它可以包含不同的组件。当用户选择一个可编辑的文本字段时,我打开一个自我实现的屏幕。OSK也是一个JFrame窗口 当用户将主窗口拖动到另一个监视器时,OSK也应显示在同一个监视器上。为此,我必须检测显示器的主框架显示 我试图找到一种方法 Toolkit.getDefaultToolkit() 但是找不到什么东西 您知道我如何检测显示JFrame的监视器吗 Java版本1.4 视窗XP 如果所有可用显示器的解决方案都相同,请回答 对于AWT: 每个控件都有getM

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

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

我试图找到一种方法

Toolkit.getDefaultToolkit()
但是找不到什么东西

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

Java版本1.4 视窗XP


如果所有可用显示器的解决方案都相同,请回答

对于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
}
Monitor-widgetMonitor=mTextWidget.getMonitor();
矩形monitorRect=widgetMonitor.getBounds();
如果(监视器显示x<0){
//显示在左监视器中,从主监视器开始
}
如果(monitorRect.x>monitorRect.WITH){
//显示在右监视器中,从主监视器开始
}
对于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;
    }
int monitorWidth=0;
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevices[]screenDevices=ge.getScreenDevices();
如果(screenDevices.length>0){
monitorWidth=screenDevices[0]。getDisplayMode().getWidth();
}
Point ownerLocationOnScreen=owner.getLocationOnScreen();
int screenMovingX=0;
if(所有者位置屏幕x<0){
screenMovingX=-监视器宽度;
}
if(所有者位置屏幕x>监视器宽度){
screenMovingX=监视器宽度;
}