1

私はEditorPart次の方法で持っています

protected void addEnterNextListener(final Control controle){
    controle.addTraverseListener(new TraverseListener() {

        @Override
        public void keyTraversed(TraverseEvent e) {
            if(e.character == SWT.CR)
                controle.traverse(SWT.TRAVERSE_TAB_NEXT);
        }
    });
}

したがって、次のフィールドに入る動作が必要なフィールドがある場合は、このメソッドを呼び出してフィールドを渡します(例:通常はText) 。
しかし、この動作が内部で必要にTitledAreaDialogなったため、と競合します。 EnterがokPressedofダイアログを呼び出すという事実。これをオーバーライドする唯一の方法は、ダイアログ内でこのようなことを行うことです。

this.txtCodInterno.addTraverseListener(new TraverseListener() {
            @Override
            public void keyTraversed(TraverseEvent e) {
                if(e.keyCode == 13 || e.keyCode == 16777296){ // Se for qualquer um dos enters
                    e.doit = false;
                    txtQuantidade.forceFocus();
                }
            }
        });

これはかなり醜く、すべてのTraverseListenerをオーバーライドさせます...
Enterを閉じようとせずに、ダイアログ内のタブのように動作させる方法はありますか?
ありがとう

4

1 に答える 1

1

ダイアログクラスで、createButtonsForButtonBar()メソッドをオーバーライドします。

このメソッドのデフォルトの実装は、OKボタンに対して createButton()を呼び出すときに、「defaultButton」パラメーターに「true」を渡します。

代わりに「false」を渡すと、探している動作が得られると思います。

@Override
protected void createButtonsForButtonBar(Composite parent) {
    createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false);
    createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
于 2012-06-28T19:31:19.267 に答える