2012-01-04 8 views
0

com.vaadin.ui.Panelに配置されている有効なフィールド間を移動するには、Enterキーを設定する必要があります。どうすればプログラムでこれを行うことができますか?vaadinフレームワークでkeycodeを別のものに置き換える方法は?

これは私の意図ですが、キーの押下を送信する方法を今していません。

Action ENTER_KEY_ACTION = new ShortcutAction(
     "Enter key" 
     , ShortcutAction.KeyCode.ENTER 
     , null 
     ); 

public Action[] getActions(Object target, Object sender) { 
    return new Action[] { ENTER_KEY_ACTION}; 
} 

public void handleAction(Action action, Object sender, Object target) { 
    if (action == ENTER_KEY_ACTION) { 
     ENTERKeyHandler(); 
    } 
} 

protected void ENTERKeyHandler(){ 
    // 
    //here i need to send a TAB keyPress 
    // 
} 

完全に今までのこのコードの動作が、終了されていません。これを達成する別の方法があるかどうかわかりません。 私の英語もすみません。

答えて

0

AbstractComponentクラスは、このためのメソッドを提供します(フィールドオブジェクトはAbstractComponentを継承します)。このメソッドはfireEvent(Component.Eventイベント)と呼ばれます。

このアプローチでは、登録されたリスナーにイベントを送信しようとすることができます。

+0

あなたの答えをありがとう。しかし、Panelのインスタンスレベルでこれを実行しようとしていますが、fireEventはprotectedメソッドとして宣言されています。私はこのように、AbstractComponentをサブクラス化する必要があると思います。これは、フォーカスされたコンポーネントのすべてのクラスの将来の開発を検討するにはあまりにも複雑です。私はまだvaadinコンポーネントといくつかのアドオンを使用しようとしていますが、自分のコンポーネントはまだ使用していません。とにかくありがとう –

0

パネル内のフィールドにFocusListenerを追加して、現在フォーカスされているフィールドを追跡してください。また、サーバー側のフィールドと、フォーカスを当てるフィールドのfield.focus()を呼び出すENTERKeyHandler()メソッドのフィールドのタブ順序を知る必要があります。

+0

ありがとうアンリ。私はこのようにして、この種の既に実装されているものを少し検索する必要がある、単純な方法でなければならない、このためのトラバーサルフォーカスポリシーとハンドラのいくつかのクラスを作成しようとします。私は車輪を再発明したくありません。 –

関連する問題