我有一个包含列的表的组合。这些列具有特定的验证,如果字段值未通过验证,它们将被涂成红色并设置错误消息。我想要一个侦听器来检查列是否设置了任何错误消息。我在复合中添加了一个侦听器,但从未调用它。我认为每当我从复合对象单击到其他复合对象或shell中的其他地方时,应该调用focuslost()方法。但它从未被称为。
myComposite = new MyComposite(myGroup, myEditor, getModel(), SWT.NONE,
calculator, this, application, modelService, partService, progressService, shell);
myComposite.setLayout(new GridLayout(2, false));
GridDataFactory.swtDefaults().span(21, 1).grab(true, true).align(SWT.FILL, SWT.TOP).applyTo(myComposite);
FocusListener focusListener = new FocusListener() {
@Override
public void focusLost(FocusEvent e)
{
if (myComposite.getErrorMessage() != null) {
getValidator().getDecorator().setError(myComposite, myComposite.getErrorMessage());
}
}
@Override
public void focusGained(FocusEvent e) { /**nothing */ }
};
myComposite.addFocusListener(focusListener);
1条答案
按热度按时间vddsk6oq1#
Composite
从来没有焦点,所以它不能生成焦点丢失事件。如果您(或系统)呼叫
setFocus
在Composite
组合将焦点设置为第一个接受它的子对象。