1

我目前正在寻找 Nattable TextCellEditor 中的内容辅助功能。我找到了通过扩展 Nattable TextCellEditor 来附加 ContentProposalAdapter 和 IContentProposalProvider 的方法。但是,从建议列表中选择的值不会在文本控件中更新。

片段:

@Override

protected Text createEditorControl(final Composite parent, final int  Style) {
this.textControl = super.createEditorControl(parent, style);

  contentProposalAdapter =
      new ContentProposalAdapter(this.textControl, new TextContentAdapter(), contentProposalProvider, keyStroke,
          null);


  contentProposalAdapter.addContentProposalListener(new IContentProposalListener() {

    @Override
    public void proposalAccepted(IContentProposal proposal) {
    System.out.println(proposal.getContent());

    }

  });
}
4

1 回答 1

2

您遇到的问题是在弹出窗口中选择值时触发的内部 FocusListener。要添加支持,您还需要使用在内容提议弹出窗口打开时不会触发的侦听器覆盖内部 FocusListener。

一个示例是添加一个指示弹出窗口已打开的布尔标志,并添加一个相应地设置该标志的侦听器。

private boolean popupOpen = false;
...
contentProposalAdapter.addContentProposalListener(new IContentProposalListener2() {

        @Override
        public void proposalPopupClosed(ContentProposalAdapter adapter) {
            this.popupOpen = false;
        }

        @Override
        public void proposalPopupOpened(ContentProposalAdapter adapter) {
            this.popupOpen = true;
        }
});

然后在处理该标志的构造函数中实现并设置一个 FocusListener。

this.focusListener = new FocusAdapter() {
        @Override
        public void focusLost(FocusEvent e) {
            if (!TextCellEditor.this.popupOpen) {
                if (!commit(MoveDirectionEnum.NONE, true)) {
                    if (e.widget instanceof Control && !e.widget.isDisposed()) {
                        ((Control) e.widget).forceFocus();
                    }
                } else {
                    if (!TextCellEditor.this.parent.isDisposed())
                        TextCellEditor.this.parent.forceFocus();
                }
            }
        }
};

如果值在选择后应该立即提交,则需要添加一个侦听器,在选择后执行提交。

contentProposalAdapter.addContentProposalListener(new IContentProposalListener() {

        @Override
        public void proposalAccepted(IContentProposal proposal) {
            commit(MoveDirectionEnum.NONE);
        }
});

不幸的是 AbstractCellEditor#InlineFocusListener 是私有的,因此不能扩展。

随时为 NatTable 提交增强票证,以引入轻松将内容提议添加到文本单元格编辑器的功能。

https://bugs.eclipse.org/bugs/enter_bug.cgi?product=NatTable

于 2015-10-13T08:15:45.370 回答