19

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

私がやりたいことは、SWT と AWT をフォーカス可能な AWT コンポーネントと組み合わせることです。AWT ウィジェットをフォーカス不能にすることに成功し、Display フィルターを追加して、フォーカスされていない場合でも、AWT コンポーネントがキーボード イベントを (直接ではなく) 受信するようにしました。しかし、いくつかの SWT コントロールがフォーカスされている場合、いくつかの問題があります。それが、コンポジットをフォーカス可能にしたい理由です。

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

4

1 に答える 1

3

に子ウィジェットが含まれている場合Composite、デフォルトのアクションは、選択されたときにフォーカスを放棄することです。これを回避するには、Compositeクラスを次のように拡張することから始めます。

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

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

次に、FocusableComposite の新しいインスタンス化で a を使用して、がクリックMouseListenerされるたびに直接 setFocus() を呼び出します。Composite

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

composite.addMouseListener(new MouseAdapter()
{
    public void mouseDown(MouseEvent event)
    {
        ((Composite)event.widget).setFocus();
    }
});
于 2014-02-22T17:45:39.017 に答える