多显示器的摆动参数

Posted

技术标签:

【中文标题】多显示器的摆动参数【英文标题】:Swing parameter for multiple monitors 【发布时间】:2016-11-17 13:03:42 【问题描述】:

我已经购买并安装了第二台显示器。 当我打开 eclipse 并将其拖到第二个监视器上时,如果我运行 swing 应用程序,它们会出现在第一个监视器上。

    是否有一个 swing 参数可以让程序在第二个监视器上运行,或者至少在运行 eclipse 的监视器上运行? 如果我将摇摆程序从第一台显示器移动到第二台显示器,它会变黑。这是为什么呢?

其他信息:

我的驱动程序和 eclipse 都是最新的。

显示器 1:笔记本电脑集成显示器,QHD,17'。一切都在扩大,包括摇摆。由集成 Intel 显卡处理>>(Windows 决定,无法更改)

显示器 2:外部 HP 22' FHD 显示器。当一个窗口的 51% 被移动到这个屏幕上时,它会缩小(但仍然从原始大小向上,通常是 1080p)。由 NVIDIA Gpu 处理>>(Windows 决定,无法更改)

示例:

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class test 

public static void main(String[] args)

    new test();     


public test()

    JFrame testingBlack = new JFrame("MCVe");       
    JPantest testingB = new JPantest();

    testingBlack.add(testingB);
    testingBlack.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    testingBlack.setVisible(true);





private class JPantest extends JPanel

    public JPantest()          
        super();
        repaint();          
    

    protected void paintComponent(Graphics g)

        super.paintComponent(g);
        g.drawLine(0, 0, 100, 100);

                   
   

这个程序画了一条简单的线。我从 ecplise 运行它,它从第一台显示器打开,这很好。我拖到第二台显示器上,它变黑了。

【问题讨论】:

“它变黑了”为了尽快获得更好的帮助,请发帖minimal reproducible example或Short, Self Contained, Correct Example。 只有 Swing 应用程序会变黑吗?另外,您所说的缩放是什么? 如果解决了,请接受答案(投票旁边的绿色复选标记)。 【参考方案1】:

是否有一个 swing 参数可以使程序在第二个监视器上运行,或者至少在运行 eclipse 的监视器上运行?

IDE 的位置无关紧要。任何无父窗口都将在屏幕的(0, 0) 坐标处初始化,与GraphicsEnvironment#getDefaultScreenDevice() 返回的坐标相同。您可以使用setLocationByPlatform 来允许窗口系统 (OS) 改为确定位置。如果你想强制定位你的第二台显示器,你可以这样做:

public Main() 

    JFrame testingBlack = new JFrame("MCVe");

    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] gds = ge.getScreenDevices();
    GraphicsConfiguration gc = gds[1].getDefaultConfiguration();
    Rectangle rect = gc.getBounds();
    testingBlack.setLocation(rect.getLocation());

    // or, if you like this style better

    testingBlack.setLocation(GraphicsEnvironment
                             .getLocalGraphicsEnvironment()
                             .getScreenDevices()[1]
                             .getDefaultConfiguration()
                             .getBounds()
                             .getLocation());

    testingBlack.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    testingBlack.setVisible(true);

只需确保您在 GraphicsDevice[] 中访问正确的设备,以避免 AIOOB 异常。 [0] 的那个应该是默认设备(虽然我不认为有这样的保证)。

如果我将摇摆程序从第一台显示器移到第二台显示器,它就会变黑。这是为什么呢?

不知道。一定与您的显示器设置有关。

【讨论】:

设备切换后不会自动调用repaint()(自定义绘画) @mKorbel 很有可能,为什么会这样? 似乎是因为 API 中的实现不接受多个设备(对自定义绘画有效),可能是错误、功能、忘记或

以上是关于多显示器的摆动参数的主要内容,如果未能解决你的问题,请参考以下文章

制作一个显示“请稍候”JDialog 的摆动线程

消失的 JTextField 的摆动问题

在 JDialog 上摆动 wait() 和 notify(),对话框不显示其组件

Qt浅谈之四十二钟表摆动显示百分比

摆动输入元素的错误状态[关闭]

ARKit 对象随机摆动