Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多监视器的Swing参数_Java_Swing_Autoscaling_Multiple Monitors - Fatal编程技术网

Java 多监视器的Swing参数

Java 多监视器的Swing参数,java,swing,autoscaling,multiple-monitors,Java,Swing,Autoscaling,Multiple Monitors,我买了并安装了第二台显示器。 当我打开eclipse并将其拖到第二个监视器上时,如果我运行swing应用程序,它们会出现在第一个监视器上 是否有swing参数使程序在第二个监视器上运行,或者至少在运行eclipse的监视器上运行 如果我将swing程序从第一个监视器移动到第二个监视器,它将变为黑色。为什么呢 其他信息: 我的驱动程序和eclipse都是最新的 显示器1:笔记本电脑集成显示器,QHD,17'。所有的东西都可以放大,包括秋千。由集成英特尔图形处理>>(由Windows决定,此项不能更

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

  • 是否有swing参数使程序在第二个监视器上运行,或者至少在运行eclipse的监视器上运行
  • 如果我将swing程序从第一个监视器移动到第二个监视器,它将变为黑色。为什么呢
  • 其他信息:

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

    显示器1:笔记本电脑集成显示器,QHD,17'。所有的东西都可以放大,包括秋千。由集成英特尔图形处理>>(由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运行它,它从第一个监视器打开,一切正常。我拖动第二个显示器,它会变成黑色

    是否有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);
    }
    
    只需确保您在
    图形设备[]
    中访问了正确的设备,以避免AIOOB异常。
    [0]
    上的那个应该是默认设备(尽管我认为没有这样的保证)

    如果我将swing程序从第一个监视器移动到第二个监视器,它将变为黑色。为什么呢


    不知道。必须与您的显示器设置有关。

    “它变黑”为了更快地获得更好的帮助,请发布或。是否只有Swing应用程序变黑?另外,你说的缩放是什么?如果这个问题解决了,请接受答案(投票旁边的绿色复选标记)。设备启动后不会自动调用repaint()(用于自定义绘制)switched@mKorbel很有可能,为什么会发生这种情况?似乎API中的实现不接受多个设备(适用于定制绘画),可能是bug、功能、遗忘,或