java & fullscreen over multiple monitors

前端 未结 4 1408
春和景丽
春和景丽 2020-12-14 11:39

A snippet from my Java application:

 JFrame f = new JFrame();
 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
 GraphicsDevice gd         


        
相关标签:
4条回答
  • 2020-12-14 11:53

    This is not what "setFullScreenWindow" is for. It's really for applications that want more direct access to the framebuffer (better performance) - like a 3D game does in DirectX, for instance. This kind of implies ONE monitor.

    See this other answer I did: JDialog Not Displaying When in Fullscreen Mode

    0 讨论(0)
  • 2020-12-14 11:55

    That is the normal behavior when you maximize a window in Windows when you have two monitors. In order two get the full resolution size, you will need to look at GraphicsConfiguration to check each GraphicsDevice.

    0 讨论(0)
  • 2020-12-14 12:14

    You could try:

    int width = 0;
    int height = 0;
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] gs = ge.getScreenDevices();
    for (GraphicsDevice curGs : gs)
    {
      DisplayMode mode = curGs.getDisplayMode();
      width += mode.getWidth();
      height = mode.getHeight();
    }
    

    This should calculate the total width of multiple screens. Obviously it only supports horizontally aligned screens in the form above - you'd have to analyse the bounds of the graphics configurations to handle other monitor alignments (depends how bulletproof you want to make it).

    Edit: And then set the size of your frame: f.setSize(width, height);

    0 讨论(0)
  • 2020-12-14 12:18

    A more general solution to Ash's code is to union the bounds of all the graphics configurations

    Rectangle2D result = new Rectangle2D.Double();
    GraphicsEnvironment localGE = GraphicsEnvironment.getLocalGraphicsEnvironment();
    for (GraphicsDevice gd : localGE.getScreenDevices()) {
      for (GraphicsConfiguration graphicsConfiguration : gd.getConfigurations()) {
        result.union(result, graphicsConfiguration.getBounds(), result);
      }
    }
    f.setSize(result.getWidth(), result.getHeight());
    

    This will work for vertically aligned monitors as well as horizontal.

    0 讨论(0)
提交回复
热议问题