2012-02-09 19 views
0

ここでアーカイブしようとしているのは、上下矢印キーを使用してコントロール内を移動することです。 コードは表示オブジェクト内でこのようになります。奇妙に思えるかもしれませんが、これは必須条件です: -/上下矢印キーを使用したトラバース - 処理ボタンのFocusOut

displayObj.addFilter(SWT.KeyDown,new Listener() { 
    public void handleEvent(Event event) { 
     Control ctrl= (Control) event.widget; 
     if(event.keyCode==SWT.ARROW_UP) {     
      ctrl.traverse(SWT.TRAVERSE_TAB_PREVIOUS); 
     } else if(event.keyCode==SWT.ARROW_DOWN) { 
      ctrl.traverse(SWT.TRAVERSE_TAB_NEXT); 
     } 
    } 
}); 

これは、テキストとコンボボックスでうまくいきます。しかし、3番目のフィールドはButton(compositeObj,SWT.CHECK)です。この時点では、SWT.FocusOutイベントが生成され、その直後にあるコンボボックスの代わりに、次の「OK」「Cancel」ボタンにフォーカスが移動するため、これは機能しません。タブのトラバースは、テキスト、テキスト、ボタン、コンボ、ボタン、ボタンのように正しい順序で正しく行われます。 UPおよびDOWN矢印イベントを個別に処理する方法がないため、FocusListenerを使用することはできません。

これを行う方法は他にありますか。すべての返信をお寄せいただきありがとうございます。

+0

ウィジェットの順序は正しいですし、タブを使用すると、トラバーサルは正常に機能しますか?つまり、チェックボックス 'Button'からタブアウトすると、OKボタンではなくコンボに移動しますか? –

+0

チェックボックスからタブアウトすると、OKボタンではなくコンボに移動します。 – Murali

答えて

0

ボタンに以下のようにTraverseListenerを使用すると、問題が解決しました。とにかくありがとうございます。

cancelButton.addTraverseListener(new TraverseListener() { 
public void keyTraversed(TraverseEvent e) { 
e.doit=false; 
if (e.keyCode==16777218) { 
userIdText.forceFocus(); 
} else if (e.keyCode==16777217) { 
connectButton.forceFocus(); 
} 
else { 
//do nothing,i guess; 
} 
} 
}); 

ありがとうございました。

関連する問題