幻のSwingアノテーション

ちなみに、何がやりたかったかというと、こういうの。

@Frame(title="ウィンドウ", closeOperation=CloseOperation.EXIT,
  contains={
    @Panel( position=Position.NORTH,
      contains={
        @TextField(name="field1", size=20),
        @Button(text="表示")
      }
    ),
    @Scroll( position=Position.CENTER,
      viewportView=@TextArea(name="textarea1")
    )
  }
)
class TestFrame extends JFrame{
   ...
}

という感じで、Swingの画面を構築するアノテーションが作りたかったわけです。
これは単なるびっくりアノテーションじゃなくて、フォームエディタを作るときの枠組みにできると思ったんですよ。


現状NetBeansにしてもJBuilderにしても、Eclipse VEにしても、フォームエディタでエディットしたフォームは、メソッド呼び出しに分解されてソース上に記述されます。
フォームエディタで編集するようなフォームの構造というのは、ようするに静的な構造なんですが、メソッド呼び出しで動的に構築するコードに置き換えられていました。
でも、やはり静的な構造は静的に記述するべきで、メソッドの中に静的構造を再現するコードが入ってしまうと、それがノイズになって本来の処理が非常によみにくくなって、またメソッド呼び出しというのは静的構造を記述するのには向かないので、静的構造も把握しづらいということになっています。
DIコンテナをオブジェクトの静的構造を記述する仕組みとして考えたとき、メソッド中から静的構造を再現するコードが排除されて処理が読みやすくなり、オブジェクトの静的構造も見易くなっていることからも、静的構造をメソッドから排除することのメリットはわかると思います。


アノテーションは、オブジェクトの静的構造を記述する仕組みだと考えているのですが、そうするとGUIの構造を記述するのにぴったりだと思ったんです。
これまでは、オブジェクトの静的構造の記述にはXMLが使われていました。NetBeansでも、GUI構造の保存にはXMLを使っています。
アノテーションXMLと同等の記述力を持っていて、しかもスキーマJava構文で決めることができるので、XMLで書いていた静的構造をJavaコードに一本化するのに非常に有力だと思ってました。
で、そうすると、Swingフォームエディタの安定した2WayTool化ができるなぁと思ったわけです。フォームエディタでもソースエディタでも編集できますよ、っていうことです。


でも、継承ができないなら記述力半減だし、循環参照できないならXMLの代替になりません・・・。

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
,n。'^゜,n。'^゜,n。'^゜,n。'^゜,n。'^゜,n。'^゜,n。'^゜,n。^゜,n。'^゜,n。'^゜,n。'^゜,n。'^゜,n。'^゜,n。'^゜,n。
_no _no _no _no _no _no _no _no _no_no _no _no _no _no _no _no
_l⌒l0 _l⌒l0 _l⌒l0 _l⌒l0 _l⌒l0 _l⌒l0 _l⌒l0 _l⌒l0 _l⌒l0 _l⌒l0
0l⌒l_0l⌒l_0l⌒l_0l⌒l_0l⌒l_0l⌒l_0l⌒l_0l⌒l_0l⌒l_0l⌒l_0l⌒l_0l⌒l_0l⌒l_
_| ̄|○  _| ̄|○  _| ̄|○  _| ̄|○  _| ̄|○  _| ̄|○  _| ̄|○ _| ̄|○
○| ̄|_○| ̄|_○| ̄|_○| ̄|_○| ̄|_○| ̄|_○| ̄|_○| ̄|_○| ̄|_○| ̄|_