您發現的內容有鍵入和無類型事件。
正如你已經發現,有一個連接。該類型的事件是這個樣子的那些:
button.addSelectionListener(new SelectionListener()
{
@Override
public void widgetSelected(SelectionEvent e) {}
@Override
public void widgetDefaultSelected(SelectionEvent e) {}
});
儘管非類型化的事件是這樣的:
button.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event e) {}
});
如果你看看Button
源代碼,你會看到:
public void addSelectionListener (SelectionListener listener) {
checkWidget();
if (listener == null) error(SWT.ERROR_NULL_ARGUMENT);
TypedListener typedListener = new TypedListener(listener);
addListener(SWT.Selection, typedListener);
addListener(SWT.DefaultSelection, typedListener);
}
正如你所看到的,addSelectionListener
只是調用addListener
。
結論:這是一種多餘的,但它使源更可用。如果您想要處理與選擇有關的所有情況,請添加SelectionListener
。如果你只是想照顧SWT.Selection
,請加上Listener
。
這真的是一個味道的問題。我更喜歡添加無類型的事件偵聽器,因爲當我只想處理一個事件時,我發現自己經常沒有使用SelectionListener
或MouseListener
的所有方法。
最後:Here是什麼,如果你想了解更多的(與已輸入和非類型化的事件之間的映射)來讀取。
特別是這部分:
在SWT的早期版本中,只有無類型的聽衆。經過Eclipse實現者,SWT用戶社區和開發人員的大量討論後,決定引入更多「類似JavaBeans」的偵聽器機制。有人認爲,這將減輕已經熟悉AWT/Swing的開發人員向SWT的過渡。非類型化偵聽器仍然是SWT中事件處理的實現機制。鍵入的偵聽器是根據它們定義的。
來源
2013-12-18 12:33:39
Baz
我的答案解決了你的問題嗎?如果是這樣,請接受它。如果沒有,請告訴我。 – Baz