0

Web アプリケーションの GUI を構築するために GWT-Ext ライブラリを使用しています。NumberField 内で ENTER キーを押して処理したいと思います。

次のようになります。

    final NumberField requiredHeight = new NumberField();
    requiredHeight.setValue(125);
    requiredHeight.setAllowBlank(false);
    requiredHeight.setAllowNegative(false);
    requiredHeight.setAllowDecimals(false);
    KeyListener listener = new KeyListener() {

        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode()==13)
                addPortlet(requiredHeight.getValue().intValue());
        }

    };
    requiredHeight.addKeyListener(listener);

しかし、コードは何もしません! 私は何を間違っていますか?一般的に言えば、そのようなハンドラーをフィールドに追加する最良の方法は何ですか?

4

3 に答える 3

4

OK、ついに解決しました。componentKeyPressの代わりに、KeyListener 内に別のコールバック関数がありますkeyPressed。これは正しいコードです:

    KeyListener listener = new KeyListener() {
        @Override
        public void componentKeyPress(ComponentEvent event) {
            if(event.getKeyCode()==13)
            {
                addPortlet(requiredHeight.getValue().intValue());
            }
            super.componentKeyPress(event);
        }

    };
    requiredHeight.addKeyListener(listener);
于 2009-10-13T07:57:26.267 に答える
1

一部のメソッドは非推奨です。単純なログイン フォームで次のコードを使用します。

    KeyDownHandler handler = new KeyDownHandler() {

        @Override
        public void onKeyDown(KeyDownEvent event) {
            if (event.getNativeKeyCode() == 13) {
                btnLogin.click(); 
            }
        }
    };
    tbLogin.addKeyDownHandler(handler);
    tbPassword.addKeyDownHandler(handler);
于 2015-03-13T06:17:26.187 に答える
0

実際にキーリスナーを登録すると、キーアップ、キーダウン、キープレスの 3 つの異なるイベントにリスナーが登録されますが、そのうちの 2 つはあなたのケースではまったく無意味です。

よりコンパクトな解決策は、次のように汎用リスナーを使用することです:
(匿名リスナークラスを使用することを許してください。より高速ですが、明らかに同じ効果があります)

import com.extjs.gxt.ui.client.event.Events; 

requiredHeight.addListener(Events.OnKeyPress, new Listener<ComponentEvent>() {
    @Override
    public void handleEvent(ComponentEvent e) {
        if (e.getKeyCode()==13)
            addPortlet(requiredHeight.getValue().intValue());           
    }
});
于 2013-05-01T16:36:11.677 に答える