2014-01-10 43 views
0

我正在使用一個SWT組合,它在鼠標按下事件時會在第一次點擊時顯示日曆彈出窗口,並在第二次點擊時隱藏彈出窗口等等。SWT組合MouseDown事件沒有正確觸發

mCombo.addListener(SWT.MouseDown, new Listener() { 
    public void handleEvent(Event event) { 
        showCalendar(); 
    } 
    }); 

當我點擊文本區域時,每次都會觸發MouseDown事件。但是當我點擊右下角的箭頭時,第一次觸發MouseDown事件,而不是第二次。

請讓我知道任何解決方案來擺脫這個問題。

+0

這是什麼平臺?由於SWT實施依賴於本地API,因此該平臺非常重要。 –

+0

mine is windows 7 – yash

+0

@yash我的答案是否適合你? – Baz

回答

1

首先,看看這個問題:SWT Listen to Combo close

Combo不支持「關閉事件」的事件。如果你可以使用CCombo來代替,那麼你只能聽SWT.MouseDown,因爲這也是在箭頭上觸發的。

public static void main(String[] args) 
{ 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout(1, false)); 
    shell.setText("StackOverflow"); 

    CCombo combo = new CCombo(shell, SWT.DROP_DOWN | SWT.READ_ONLY); 
    combo.add("First"); 
    combo.add("Second"); 

    Listener listener = new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      System.out.println(e); 
     } 
    }; 

    combo.addListener(SWT.MouseDown, listener); 
    combo.addListener(SWT.Selection, listener); 

    shell.pack(); 
    shell.open(); 

    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
     { 
      display.sleep(); 
     } 
    } 

    display.dispose(); 
}