首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于组合的所有控件的FocusListener

用于组合的所有控件的FocusListener
EN

Stack Overflow用户
提问于 2017-01-11 12:05:10
回答 2查看 430关注 0票数 2

我为Composite编写了包含多个控件(StyledTexts、Buttons等)的代码。

我想为整个FocusListener实现一个Composite (不仅仅是其中的一个控件),但是FocusListener没有做任何事情。

我尝试自己实现它,我的尝试是:在复合内部的每个控件中添加一个FocusListener并处理这些事件。

在尝试这样做的时候,我发现了一些问题:

  • 当两个控件有一个FocusListener,而我将焦点从一个更改为另一个时,FocusLost事件将在FocusGained之前触发。
  • 因此,我无法确定焦点是分配给我的组合中的其他控件之一,还是该组合完全失去了焦点。

注意:--我尝试在focusLost(...)方法中使用Display.getFocusControl(),但它只返回焦点所在的控件!

我的问题:在focusLost(...)方法中,是否有可能找出接下来哪个控件将接收焦点?

如果没有:是否有其他方法为FocusListener实现Composite

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-11 13:08:00

在发送focusLost()事件时,还不知道哪个控件(如果有的话)将接收焦点。

您可以添加一个显示筛选器,每当整个应用程序中的控件获得焦点时,该过滤器就会通知您。在您的‘Listener`’实现中,只要控件获得不包含在复合中的焦点,就可以保存文本输入。例如:

代码语言:javascript
复制
Listener listener = new Listener() {
  @Override
  public void handleEvent( Event event ) {
    if( event.widget != text || event.widget != fontButton || ... ) {
      save();
    }
  }
};
display.addFilter( SWT.FocusIn, listener );

确保只在观察到的复合还活着时才添加侦听器。当组合被处理时,移除过滤器。

代码语言:javascript
复制
display.removeFilter( SWT.FocusIn, listener );
票数 2
EN

Stack Overflow用户

发布于 2017-01-16 13:44:22

@RüdigerHermanns工作得很好,但为了完整起见,我也会在这里发布我的解决方案:

我已经在我的组合中为SWT.ActivateSWT.Deactivate编写了侦听器:

代码语言:javascript
复制
public MyComposite(Composite parent, int style)
{
    super(parent, style);
    createGuiElements(this);

    this.addListener(SWT.Deactivate, new Listener()
    {
        @Override
        public void handleEvent(Event event)
        {
            for (FocusListener listener : focusListeners) listener.focusLost(new FocusEvent(event));
        }
    });
    this.addListener(SWT.Activate, new Listener()
    {
        @Override
        public void handleEvent(Event event)
        {
            for (FocusListener listener : focusListeners) listener.focusGained(new FocusEvent(event));
        }
    });
}

通知所有的focusListeners在Composite上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41590506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档