GraphicsConfigurationって

ライブラリって、所詮、人間の作ったものだから、探求するより大事なことはいろいろあると思うんだけど、なんとなく、気になったので調べることにした。

どうやって得る

JFrameのコンストラクタにGraphicsConfigurationを渡すってことは、その前に得られているってことだ。Swingで作ったHelloWorldのプログラムは、mainからJFrameのコンストラクタを呼び出してるから、その時点で得る手段があるってことだね。java.awt.Toolkit辺りかね、と思っていたら、GraphicsConfigurationのJavaDocで、See AlsoからGraphicsEnvironment、GraphicsDeviceと手繰ってあっさり見つかった。
GraphicsEnvironmentが、クラスメソッドにgetLocalGraphicsEnvironment()ってを持っていて、JavaVMの動いている環境のGraphicsEnvironmentのインスタンスを得られるらしい。さらに、そのインスタンスが、スクリーンデバイスの配列を持っている。
getScreenDevices()メソッドでGraphicsDeviceの配列として取れるんだけど、その0番目を取り出すなんてのはなんか嫌だなぁ、と思って探したら、案の定、getDefaultScreenDevice()なんてメソッドが見つかった。やっぱり、あるね。同じ構造が、GraphicsDeviceとGraphicsConfigurationの間にもあって、getConfigurations()とgetDefaultConfiguration()が定義されている。

とりあえず

JFrameのコンストラクタの引数に、以下のように書いて渡すことにした。

GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration()

JFrameにJTextAreaを追加して、渡されたGraphicsConfigurationをtoString()して表示してみた。

sun.awt.Win32GraphicsConfig@9304b1[dev=Win32GraphicsDevice[screen=0],pixfmt=0]

ふーん。こういうのが得られるのね。2つ以上、画面があるような場合は、あらかじめ、GraphicsDeviceの配列から取り出して渡してやれば、setVisible()したときに、そっちに表示されるのかね。今度、試してみよう。