我目前正在寻找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());
}
});
}
答案 0 :(得分:0)
您遇到的问题是在弹出窗口中选择值时触发的内部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