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()したときに、そっちに表示されるのかね。今度、試してみよう。