LoginSignup
2
1

今更JavaでGUI

Posted at

JavaでWindow制御ってどうやってんの?

ふと疑問に思ったので調べてみました。
仮説としてはWindow制御はOS領域になるので、どこかでnativeメソッドなりを呼び出して管理を任せているはず。
今回はWindowsを対象にしてます。

とりあえず何はともあれ表示

1.PNG
はい。
白背景のWindowを作成して表示することができました。
簡単なんですが、このキャプチャを取る時に予想外の挙動が。
Windows標準のSnipping Toolを使ったところ、表示されていたWindowがどこかへ行ってしまいます。
これもOS側での挙動でしょうか。

APIコールを探して

Win32APIあたりを呼んでそうなnativeメソッドを探してソースコードを読み進めていきます。
2.PNG
3.PNG
4.PNG
5.PNG
これかな?

確認してみたところ以下の順番で参照している模様。
awt.h -> stdhdrs.h -> windows.h -> winuser.h

わかったこと

WindowクラスからComponentクラスを経て、ComponentPeerインターフェイスの各環境向け実装を呼び出し、そこから各環境用のJDK実装を呼び出していることがわかりました。
概ね予想通りの流れでしたが、思っていたより各環境へ合わせるため抽象化は多かったです。

今後の展望

根っこの方の内容は大まかに掴めたはずなので、今度は枝葉の部分として描画処理をやっていきます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1