Java и полный экран по нескольким мониторам

Отрывок из моего JAVA-приложения:

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

Таким образом, то, что это делает, делают его сам полный экран. Теперь нечетная вещь состоит в том, что программа является полным экраном, но только на одном мониторе! Например, у Меня есть система Windows Vista с двумя экранами, которые объединены в одном рабочем столе. Что сделать, автоматически позволяют ему пойти полный экран по всем мониторам?


Хорошо я попробовал это:

import java.awt.image.ColorModel;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;

class grdevs
{
    public static void main(String [] args)
    {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gs = ge.getScreenDevices();
        for(GraphicsDevice curGs : gs)
        {
            GraphicsConfiguration[] gc = curGs.getConfigurations();
            for(GraphicsConfiguration curGc : gc)
            {
                Rectangle bounds = curGc.getBounds();
                ColorModel cm = curGc.getColorModel();

                System.out.println("" + bounds.getX() + "," + bounds.getY() + " " + bounds.getWidth() + "x" + bounds.getHeight() + " " + cm);
            }
        } 
    }
}

но это дает:

0.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
0.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
0.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
0.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
0.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
0.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
1024.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
1024.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
1024.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
1024.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
1024.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0
1024.0,0.0 1024.0x768.0 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0

Например, я ожидал бы устройство, способное к 2048x768, поскольку они объединены в одном (я нажал на "extend desktop").

12
задан Folkert van Heusden 20 December 2009 в 19:30
поделиться

4 ответа

Вы можете попробовать:

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();
}

Это должно вычислить общую ширину нескольких экранов. Очевидно, он поддерживает только горизонтально выровненные экраны в приведенной выше форме - вам нужно будет проанализировать границы графических конфигураций, чтобы обработать другие выравнивания монитора (зависит от того, насколько пуленепробиваемым вы хотите сделать это).

Изменить: А затем установить размер вашего кадра: f.setSize (width, height);

6
ответ дан 2 December 2019 в 05:15
поделиться

Это нормальное поведение, когда вы разворачиваете окно в Windows, когда у вас есть два монитора. Чтобы два получили полный размер разрешения, вам нужно будет посмотреть на GraphicsConfiguration , чтобы проверить каждое GraphicsDevice.

1
ответ дан 2 December 2019 в 05:15
поделиться

Это не то, для чего "setFullScreenWindow". Это действительно для приложений, которые хотят иметь более прямой доступ к фрейм-буферу (лучшая производительность) - как, например, 3D-игры в DirectX. Этот вид подразумевает ОДИН монитор.

Смотрите другой ответ: JDialog не отображает в полноэкранном режиме

3
ответ дан 2 December 2019 в 05:15
поделиться

Используя java.awt.Toolkit, вы можете получить полный размер экрана (все мониторы):

    Toolkit tk = Toolkit.getDefaultToolkit();
    Dimension dim = tk.getScreenSize();
0
ответ дан 2 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: