swt focuslistener focuslost()

w41d8nur  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(411)

我有一个包含列的表的组合。这些列具有特定的验证,如果字段值未通过验证,它们将被涂成红色并设置错误消息。我想要一个侦听器来检查列是否设置了任何错误消息。我在复合中添加了一个侦听器,但从未调用它。我认为每当我从复合对象单击到其他复合对象或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);
vddsk6oq

vddsk6oq1#

Composite 从来没有焦点,所以它不能生成焦点丢失事件。
如果您(或系统)呼叫 setFocusComposite 组合将焦点设置为第一个接受它的子对象。

相关问题