2013-06-04 58 views
18

是否可以在SWT中创建可合焦的复合材料?我通过显示过滤器捕获所有键盘事件,但当焦点位于树或列表上时会出现一些问题--GTK +的默认操作是搜索控件的内容。在SWT中制作可合焦的复合材料

我想要做的是将SWT和AWT与可聚焦的AWT组件混合。我设法让AWT小部件无法聚焦,并且我添加了“显示”过滤器,以使AWT组件接收键盘事件(但不是直接),即使它没有被聚焦。但是,当一些SWT控件集中时,存在几个问题 - 这就是为什么我想使复合可聚焦。

所以我的最后一个问题是:是否有可能使SWT组合可聚焦?

+1

这不是一个副本...在上面的链接主题中,用户想要做一些完全不同的事情......他希望跳过Composite中的某些控件;我想制作复合键盘 - 可调焦。没有必要关闭我的问题,因为我还没有任何答案。 – m4tx

+0

该问题的要点完全相同 - 选择复合材料。我会建议你尝试从该问题答复的解决方案。 – Eugene

+3

不......我不想标签选择复合。我想制作复合键盘可调焦的;通过单击它来使复合捕捉键盘事件(就像您单击时所做的那样,例如文本框);我再说一遍 - 我不想选中它。而且我无法尝试从该问题答复中获得解决方案,因为我的组合中没有任何控件(或者,确切地说,我在此SWT组合中有1个AWT控件,但我不想让AWT控制可聚焦,因为它会导致很多小故障......)。 – m4tx

回答

3

如果一个Composite包含子窗口小部件,默认操作是在选择它时放弃焦点。为了规避这一点,通过扩展Composite类这样开始:

class FocusableComposite extends Composite 
{ 
    public FocusableComposite(Composite parent, int style) 
    { 
     super(parent, style); 
    } 

    public boolean setFocus() 
    { 
     return super.forceFocus(); 
    } 
} 

然后用MouseListener上FocusableComposite的新实例调用的setFocus()直接每当Composite点:

Composite composite = new FocusableComposite(shell, SWT.NONE); 

composite.addMouseListener(new MouseAdapter() 
{ 
    public void mouseDown(MouseEvent event) 
    { 
     ((Composite)event.widget).setFocus(); 
    } 
});