【问题标题】:How does default location work? / What is the default monitor?默认位置如何工作? / 什么是默认监视器?
【发布时间】:2021-07-10 05:13:33
【问题描述】:

我正在开发一些应用程序,该应用程序可以获取用户多台显示器的宽度,假设他们顶部没有任何显示器,然后为他们提供多个按钮/框架,以便他们可以关闭他们使用的任何显示器希望。

我的问题 除了位置兼容性之外,一切都很好。 如果有人有 4 个 1920 宽度的显示器,我如何将我的参考/起始帧定位在最左边的显示器上,以便我可以说“继续 1920 像素,制作一个帧,......”? 你会认为“使用 setLocationtoNull,但它是如何工作的??你会认为它只是中间监视器,长度/2;但中​​间监视器是什么!?它不能是 totalScreensLength/2,因为那会意味着程序在监视器之间分成两半!(所以它很可能是主监视器的中间)。 并且不使用任何 setLocations,该程序位于主监视器的左上方....但是主监视器是什么??

如果我知道 java 是如何确定哪个监视器是“主”的,那将解决我的问题(不,仅通过 Toolkit.getScreenSize() 知道主监视器的分辨率是不够的)。

    //creating invis black frames
for(int c=0;c<inArr.length;c++){
    int xLoc=0;
    for(int i=0;i<c;i++){
/**/    xLoc+=resList[i];
    }System.out.println(xLoc);

    JFrame blackOut=new JFrame();
    blkList.add(blackOut);
    blackOut.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    blackOut.getContentPane().setBackground(Color.BLACK);
    blackOut.setUndecorated(true);
                    
    blackOut.setSize(resList[c],5000);
/**/blackOut.setLocation(xLoc-1280,-2000);
                    
    blackOut.setVisible(false);
}

这是使程序工作的代码,因为它是针对我的 1280,1920,1440 设置进行硬编码的。 问题出在blackOut.setLocation(xLoc-1280,-2000); 我必须知道起始帧的确切位置,所以我可以将帧移到左边,所以“缩放”有效。这就是这里发生的事情: 帧从我中间的 1920 显示器的左上角开始,所以我将帧向左移动 1280 像素,使其位于我最左边的显示器的左上角。

对不起,如果这太冗长了,只是想提供足够的细节。 另外,recently discovered this 并进入了它的文档,但我不明白我如何使用这些数据,并且不确定它是否能够为我提供必要的信息(知道哪个监视器是主要的,并且能够区分监视器,即使它们的分辨率相同)

【问题讨论】:

    标签: java swing jframe location monitor


    【解决方案1】:

    这可能是部分答案。 从您的链接发现中,您可以通过调用graphicsDevice.getDefaultConfiguration().getBounds() 获取每个设备的默认配置和边界。这包括每个屏幕的坐标/偏移量以及单个屏幕尺寸。 在SunGraphicsEnvironment 对GraphicsEnvironment.getScreenDevices() 的实现中,屏幕设备是通过迭代屏幕数量并为每个索引创建一个设备来创建的——索引被传递给每个设备。

    【讨论】:

    • GraphicsDevice 的 JavaDoc 有一个关于如何在每个 GraphicsDevice 上构造 JFrame 的示例。也许您可以将此添加到您的答案中。
    • 哦,非常感谢!这就像,很棒的信息!给出分辨率、偏移量和索引!干杯:D 我为任何想知道的人使用的代码是:GraphicsEnvironment gEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] 设备= gEnvironment.getScreenDevices(); for(GraphicsDevice monitor:devices){ System.out.println("* "+monitors.getDefaultConfiguration().getBounds()); }
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多