SmartGWTを使う上での備忘録。たぶん、またしばらく触ると忘れそうなんで。
ダイアログ系使うだけでも便利ですな。
セットアップ
まず、ライブラリにSmart GWTのjar2つ追加。
次にモジュールのxmlに以下の1行を追加。
<inherits name="com.smartgwt.SmartGwt"/>
最後にhtmlにテーマへのパスを設定。
<script type="text/javascript"> var isomorphicDir = "モジュール名/sc/"; </script>
モジュール名のところは適切に環境に合わせてかえること。準備はこれだけ。
モーダルダイアログとかウインドウを作りたい
利用するのは「com.smartgwt.client.widgets.Window」。
モーダル化したい場合「#setIsModal(true);」
リサイズと影表示を組み合わせた場合左側や上側を利用してリサイズすると影の表示位置がずれる。実用上影の描画が多少代わったところで問題にはならないけど、使わないほうがいいかも。
子のコンポーネントを追加する場合は「#addItem(コンポーネント)」を使うこと。使用できるものはGWT標準のコンポーネントもSmartGWT独自のものも可能。
継承関係で祖先にあたるCanvasは「#addChield」を使うのだが、これは使ってはダメ。描画位置がウインドウの中にならない。
表示したいときは「#show()」で。
コンポーネントをドラッグしたい
ウインドウも含めてSmartGWTのあらゆるコンポーネントはCanvasを継承している。
この「#setCanDragReposition(true)」メソッドを実行するだけであらゆるものがドラッグで移動可能になる。ウインドウを使わなくてもいいみたい?このメソッドはドラッグ&ドロップ用のメソッドではないので注意されたし。
便利なのが「#setKeepInParentRect(true);」。こいつは親のコンポーネントの外にドラッグしても出ないようにしてくれる優れもの。Windowで設定しておけば画面からはみ出さないようにできるため設定しておこう。
メッセージボックス系は?
「com.smartgwt.client.util.SC」というstaticてんこもりなクラスにある。
SC.say("めっせーじ"); SC.warn("わーにんぐ");
上のように並べて書いても順番に実行されて結果的に最後に設定したダイアログのみ表示される。Flexのようだといえば分かりやすいか。
もうひとつ注意としてconfirm(OK,キャンセルボタンが出るダイアログ)時のBooleanCallbackに渡される値。
SC.confirm("確認",new BooleanCallback() { public void execute(Boolean value) { SC.say(value.toString()); } });|
上のコードでOKボタンを押すと、trueが、キャンセルやクローズボタン、ESCキーを押すとfalseが表示されるというのは間違い。キャンセル系はnullが返ってくるため、表示がされない(例外が出てるはず)のだ。
SC.say(String.valueOf(value));
としておけば当たり前だが大丈夫。
ちなみにYES、NOのダイアログを出すときは以下のようにする。
SC.ask("タイトルも出せますよ","よろしいですか?",new BooleanCallback() { public void execute(Boolean value) { SC.say(String.valueOf(value)); } });
これはYESを押すとtrue、NOを押すとfalse、クローズボタンやESCキーでnullが返ってくる。
ちなみに上の例から分かるように、全てのダイアログは文字列をひとつ引数増やせばタイトル部分に文字を表示することが可能だ。
ほかにモーダルなプロンプトを出すことも出来る。処理に時間がかかる場合表示しておくと便利。
SC.showPrompt("ぷろんぷと"); new Timer() { @Override public void run() { SC.clearPrompt(); } }.schedule(3000);
上記のコードでは3秒後にプロンプトが消えて操作が出来るようになる(Thread#Sleepが使えないのでニュアンスをつかんでいただければ)。