2013-06-04 17 views
18

SWTでフォーカス可能なコンポジットを作成できますか?私は、ディスプレイのフィルタを介してすべてのキーボードイベントをキャッチしていますが、フォーカスがツリーやリストにあるときにいくつかの問題があります - GTK +のデフォルトアクションは、コントロールの内容を検索することです。SWTでコンポジットをフォーカス可能にする

私がしたいことは、SWTとAWTをフォーカスを当てるAWTコンポーネントと組み合わせることです。私はAWTウィジェットをフォーカス不能にすることができました。そして、AWTコンポーネントがフォーカスしていなくても(直接ではなく)キーボードイベントを受け取るようにDisplayフィルタを追加しました。しかし、いくつかのSWTコントロールに焦点が当てられているときにはいくつかの問題があります - そのため、私は複合体をフォーカス可能にしたいのです。

私の最終的な質問は、SWTコンポジットをフォーカス可能にすることですか?

+1

それはありません上のリンクされたトピックでは、ユーザーはまったく異なる何かをしたいと思っています。彼はCompositeの特定のコントロールをスキップしたいと思っています。私は複合キーボードをフォーカス可能にしたい。まだ答えがないので質問を閉じる必要はありません。 – m4tx

+0

その質問のポイントはまったく同じです。タブを選択すると、コンポジットが選択されます。私はその質問の回答から解決策を試すことをお勧めします。 – Eugene

+3

いいえ...タブを選択してコンポジットにしたくありません。私は複合キーボードをフォーカス可能にしたい。コンポジットにキーボードイベントをクリックしてキャッチするようにします(たとえば、テキストボックスをクリックしたときと同じように)。私は繰り返す - 私はそれをタブ選択したくない。私のコンポジットにはコントロールがありません(または、正確には、このSWTコンポジットに1つのAWTコントロールがありますが、AWTを作成したくありませんそれは多くの不具合を引き起こすので、フォーカスを制御する...)。 – m4tx

答えて

3

Compositeに子ウィジェットが含まれている場合、デフォルトの動作では、選択時にフォーカスを放棄します。これを回避するには、次のようなCompositeクラスを拡張することで起動します。次に

class FocusableComposite extends Composite 
{ 
    public FocusableComposite(Composite parent, int style) 
    { 
     super(parent, style); 
    } 

    public boolean setFocus() 
    { 
     return super.forceFocus(); 
    } 
} 

のSetFocus(呼び出すためにFocusableCompositeの新しいインスタンス化にMouseListenerを使用)Compositeがクリックされるたびに、直接:

Composite composite = new FocusableComposite(shell, SWT.NONE); 

composite.addMouseListener(new MouseAdapter() 
{ 
    public void mouseDown(MouseEvent event) 
    { 
     ((Composite)event.widget).setFocus(); 
    } 
}); 
関連する問題