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);
        }
    });
}

所以,当我有一个需要输入到下一个字段行为的字段时,我只是调用这个方法传递我的字段(例如:通常是 a Text
但是现在我需要在 a 中使用这种行为TitledAreaDialog但它与输入调用okPressed对话框的事实。覆盖它的唯一方法是在对话框中执行类似的操作

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 回答