Locked History Actions

GWT/Designer

GWT Designer

歴史的経緯と概略

EclipseにはVisualEditorというショボイGUIビルダが付属していたが(今も?)、その一方でInstantiationsという会社がWindowBuilderというGUIビルダを販売していた。Googleは2010年にこれを買収し、このプログラムをGWT用のGUIビルダとして採用すると共に、Eclipseプロジェクトに寄贈。将来的にはEclipseプロジェクトの一つになるらしいが、現在はまだGoogleからGWT開発キットの一部としてリリースされている状態ではある。

このプログラムの優秀なところは、複数のWidgetのサポートとBi-directional Code Generationにある。GWTのサポートだけではなく、SwingとSWTをもサポートしていること。Bi-directional Code Generationの売り文句は以下だ。

http://code.google.com/intl/ja/webtoolkit/tools/gwtdesigner/features/bidirectional.htmlより

Most GUI builders in the world will only read and write the code that they themselves create. WindowBuilder Pro is an exception to that rule. It can read and write not only the code it creates, but also a great deal of code written by hand(>90%). If you come across a case that does not work, send it to us for analysis. The more broken examples that we can "fix", the better the tool will get in the long run (and the better chance you will have of salvaging your old code as-is).

世界中のほとんどのGUIビルダは、それ自身が生成したコードを読み書きするだけだが、WindowBuilder Proは例外である。 それ自身のコードを読み書きするのみならず、手で記述したものの90%以上を扱うことができる。 もし、うまくいかないようなことがあったら、我々が解析してみるからそれを送って欲しい。 壊れてしまうような例を我々が修正すれば、このツールが長く生き残れるようになる(そして、君の古いコードを「そのまま」救出する手立てにもなる)。

2011/11現在、Googleのサイトにドキュメントがアップされているが、元々商用だっただけあって、非常にわかりやすいマニュアルになっている(英語だが)。また、ほとんどの部分を製品版のものを流用していると思われ、GWT Designerではなく、WindowBuilder(あるいはWindowBuilder Pro)という名称のままになっている部分が多数ある。

参考

特徴的な事柄

  • GWT DesignerはいわゆるGUIビルダだが、特にGoogle Web Toolkit専用で(最終的には)JavaScriptによるUIだけを作成するというものではなく、SwingがSWTのUIも構築が可能なようである。GWTやEclipseのオマケと思ったら大間違いで、非常に優れたツールであると言えるが、これは以下のサンプルを試してみれば実感できる。

  • http://code.google.com/intl/ja/webtoolkit/tools/gwtdesigner/tutorials/loginmanager.html

トラブル

  • GWT Designer was not able to show the GUI
    何らかの理由でGWTを認識しなくなり、Designerの表示等が一切できなくなる。おそらくワークスペース内の設定がおかしくなるらしい。ワークスペースを作成し直すと治る。

  • 現在(GWT2.4)のデザイナのImageBundleの挙動には大きなバグがあり、まともに動作しない(後述)。

ImageBundleのバグ

パレットのImageBundleでaddすると、ImageBundleを継承したインターフェースを指定できて、その中の画像がアイコンとなってパレットに追加されるはずだが、これはうまくいく場合もあるし、例外が発生する場合もある。

また、パレットへの追加ができて、パレットからrootPanelに画像をドロップすることに成功しても、なぜかドロップ先には画像が表示されない。

ImageBundleはdeprecatedになっているので、代替のClientBundleを使った場合には、どうやってもパレットに追加できない。