2013-06-04 63 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(); 
    } 
});