2008/4/21 月曜日 by kouichi
Windowイベントって指定できないのかなぁと思っていたんですが、できたので載せておきます。
DOM#addEventPreview
を使えばできました。
DOM.addEventPreview(new EventPreview(){
public boolean onEventPreview(Event event) {
if(DOM.eventGetType(event) == Event.ONKEYDOWN){
// キーダウン時のイベント
}
if(DOM.eventGetType(event) == Event.ONMOUSEWHEEL){
// マウスホイール
}
return true;
}
});
EventPreviewのonEventPreviewメソッドを実装します。
ここで、Eventとして渡されるのがWindowのイベントになります。
後は
DOM#eventGetType
でイベントの種類を判断すればOKです。
onEventPreviewの戻り値にfalseを返すとその後のイベントがキャンセルされます。
Posted in GWT | No Comments
2008/4/16 水曜日 by kouichi
外部のJavaScriptライブラリと絡めるとなんだかんだと結構ややこやしいですね。
一番はこんな感じでブリッジクラス、ブリッジメソッドを作ってやり取りさせるのがよさそうです。
例えば
public class Bridge{
public static native void setup() /*-{
$wnd.mono.load = @net.mono_koubou.app.client.manager.MonoViewerManager::load();
$wnd.mono.save = @net.mono_koubou.app.client.manager.MonoViewerManager::save();
}-*/;
public static native void setVisible(boolean view) /*-{
$wnd.mono.setVisible(view);
}-*/;
}
こんな感じのクラスを作ってEntiryPointで
Bridge.setup();
を呼びます。
こうしておけば外部のJavaScript上から
mono.load();
でメソッドが呼べます。
また、GWT側からは
Bridge.setVisible(boolean);
で外部メソッドが呼べます。
後、シグネチャ間違いがちなのでこちらに載せておきます。
booleanはJSNI上では”Z”
intは”I”
Stringは”Ljava/lang/String;”
です。
Posted in GWT | No Comments
2008/4/15 火曜日 by kouichi
Panel上にたくさんのコンポーネントが表示されていて内容を更新する際に、描画がカクカクする場合の修正ポイントです。
例えば
panel.setPosition(x, y);
panel.setHeight((int)(PANEL_HEIGHT*scale));
panel.setWidth((int)(PANEL_WIDTH*scale));
// パネル上のイメージリサイズ
panel.getImage().setHeight((int)(IMAGE_SIZE*scale)+"px");
panel.getImage().setWidth((int)(IMAGE_SIZE*scale)+"px");
・・・
・・・その他パネル上のコンポーネント再描画処理
// パネル表示
panel.show();
こんな処理だったのですが、再描画の回数が多いと画面がカクカクしてしまいます。
調べてみるとpanel.setPositionが呼ばれた時点で1回パネルの描画が走ります。
その後パネル上のコンポーネントの描画が行われ最後のshowで再度パネルが再描画されるので、正味2回パネルの描画が実行されていました。
// パネル上のイメージリサイズ
panel.getImage().setHeight((int)(IMAGE_SIZE*scale)+"px");
panel.getImage().setWidth((int)(IMAGE_SIZE*scale)+"px");
・・・
・・・その他パネル上のコンポーネント再描画処理
// パネル表示
panel.setPosition(x, y);
panel.setHeight((int)(PANEL_HEIGHT*scale));
panel.setWidth((int)(PANEL_WIDTH*scale));
panel.show();
とまとめるとカクカク感はなくなります。
あまりたいした話ではないですが、なかなか解決しなかったので書いておきます。
ちなみに
panel#doLayout
というメソッドもそれっぽかったのでいろいろ試してみたんですが、いまいち使い道が不明です。。。
Posted in GWT | No Comments