在TitledAreaDialog上使用enter进行遍历

时间:2012-06-28 17:33:12

标签: eclipse eclipse-plugin swt eclipse-rcp jface

我有一个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调用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 ...
有没有办法让输入行为像对话框中的选项卡而不试图关闭他? 感谢

1 个答案:

答案 0 :(得分:1)

在对话框类中,覆盖 createButtonsForButtonBar()方法。

当为“OK”按钮调用 createButton()时,此方法的默认实现为'defaultButton'参数传递'true'。

如果你传递'假',我认为你会有你想要的行为:

@Override
protected void createButtonsForButtonBar(Composite parent) {
    createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false);
    createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}