我想添加一個選擇監聽器到我的自定義控件,其中包含幾個按鈕,以便無論何時點擊一個按鈕,都應該由控件執行特定的功能。問題是:我想將監聽器添加到控件本身,而不是單獨添加到其每個子按鈕。我該怎麼辦?如何將偵聽器添加到自定義控件?
0
A
回答
1
從文章Creating Your Own Widgets using SWT:
SWT事件機制
SWT提供了一個低級別的監聽機制,以及「輸入」監聽器通常的Java。每個SWT小部件都理解addListener(int eventType,Listener listener)和notifyListeners(int eventType,Event event)。 eventType常量在類SWT中定義。發生事件時,窗口小部件會創建一個包含適當類型常量的SWT Event對象。 notifyListeners方法爲Listener調用handleEvent(Event event)。如果您需要重用現有的SWT事件,則通常會使用此機制。
例如,如果你的widget實現了評選活動,你可以實現你的「類型」添加和刪除方法如下:
public void addSelectionListener(SelectionListener listener) { addListener(SWT.Selection, new TypedListener(listener)); } public void removeSelectionListener(SelectionListener listener) { removeListener(SWT.Selection, listener); }
當「評選活動」在你的widget發生時(比如說當, child1被選中),你使用notifyListeners通知應用程序的選擇監聽器。
child1.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { notifyListeners(SWT.Selection, new Event()); } });
請注意,當我們添加偵聽器時,我們首先將它包裝在TypedListener中。這是因爲TypedListener的handleEvent(Event event)方法根據Event中的類型創建適當的TypedEvent子類,然後爲類型化事件調用適當的方法。通過這種方式,應用程序可以將Java類型的偵聽器添加到窗口小部件,但窗口小部件實現可以使用更高效的低級偵聽器機制。但是,確保您的小部件實現提供了一個類型化的偵聽器API。應用程序不應該調用低級偵聽器方法。類型化的偵聽器方法可以防止意外的編程錯誤,例如假定所有的小部件都可以處理所有類型的事件,或者Event類中的所有字段對所有事件均有效。
相關問題
- 1. 將事件偵聽器添加到iframe
- 2. 將事件偵聽器添加到JFrame
- 3. 將「this」添加到事件偵聽器?
- 4. extjs4:如何將自定義偵聽器和工具提示添加到圖表?
- 5. 如何刪除自定義偵聽器?
- 6. 如何將事件偵聽器添加到內部定義的圖像javascript
- 7. Javascript添加事件偵聽器與自定義回調?
- 8. CKEditor - 添加自定義事件偵聽器並呼叫原始
- 9. jQuery添加自定義事件偵聽器
- 10. 如何將偵聽器添加到現有的偵聽器對象?
- 11. 添加偵聽器到Ext.grid.ColumnModel
- 12. 如何在android中創建自定義偵聽器到文件
- 13. TypeScript自定義事件偵聽器
- 14. 設置自定義事件偵聽器
- 15. React自定義事件偵聽器
- 16. 自定義事件偵聽器。EventEmitter
- 17. 將SSL偵聽器添加到UnboundID
- 18. 將文檔偵聽器添加到JCombobox
- 19. 如何將事件偵聽器添加到多個項目?
- 20. 如何將偵聽器事件添加到Java中的JComboBox中
- 21. 如何將事件偵聽器添加到動態元素ID?
- 22. 如何將事件偵聽器添加到svg中的對象?
- 23. 如何將自定義屬性添加到asp.net自定義服務器控件?
- 24. 將自定義控件添加到DataGridViewCell
- 25. 將自定義控件添加到MoviePlayer
- 26. 添加偵聽器或定時器到控制檯
- 27. 添加AWT偵聽器到SWT組件
- 28. 如何將關鍵字偵聽器添加到LWJGL顯示器?
- 29. 如何將偵聽器添加到react-native中的傳感器?
- 30. 擴展ActionEvent?自定義事件,沒有自定義偵聽器?
如果您的控件是面板或框架本身,則可以將偵聽器添加到其中。 – Paniz
@Paniz我使用SWT,所以基本上我的自定義控件是一個複合 – Anas