13

私のJavaアプリケーションからのスニペット:

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

それで、それがすることはそれを自己フルスクリーンにすることです。奇妙なことに、プログラムは全画面表示ですが、1台のモニターにしか表示されません。たとえば、1つのデスクトップに結合された2つの画面を備えたWindowsVistaシステムがあります。すべてのモニターで自動的に全画面表示にするにはどうすればよいですか?


OK私はそれを試しました:

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のデバイスが1つに統合されていることを期待します(「デスクトップの拡張」をクリックしました)。

4

4 に答える 4

22

Ashのコードに対するより一般的な解決策は、すべてのグラフィック構成の境界を結合することです。

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

これは、水平方向だけでなく垂直方向に配置されたモニターでも機能します。

于 2012-11-14T14:42:46.523 に答える
6

あなたは試すことができます:

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

于 2009-12-21T04:41:32.970 に答える
3

これは「setFullScreenWindow」の目的ではありません。これは、たとえばDirectXの3Dゲームのように、フレームバッファへのより直接的なアクセス(パフォーマンスの向上)を必要とするアプリケーション向けです。この種のことは、1台のモニターを意味します。

私が行ったこの他の回答を参照してください:フルスクリーンモードのときにJDialogが表示されない

于 2009-12-22T20:36:58.430 に答える
1

これは、モニターが2つあるときにWindowsでウィンドウを最大化する場合の通常の動作です。2つがフル解像度サイズを取得するには、 GraphicsConfigurationを調べて各GraphicsDeviceを確認する必要があります。

于 2009-12-20T18:48:07.250 に答える