2017-02-28 56 views
1

我使用Codename One開發移動應用程序。Codename在包含更多子容器的容器中偵聽的一個事件

我有一個外部容器,我通過調用方法addPointerReleasedListener來添加一個ActionListener

還有更多的內部容器沒有添加任何監聽器。

舉例說明:

outer-Container (added `addPointerReleasedListener` to it) 
- An Image Container (NO listener added) 
- A Text Container (NO listener added) 


-------------------------------------------------------------- 
| |   |            | 
| |   |            | 
| | Image | Some Text here        | 
| |   |            | 
| |   |            | 
-------------------------------------------------------------- 
            ^ ^ ^
            works only if I click/press 
            here 

我注意到,爲了調用事件,我必須單擊/按在其中任何未佔用內部容器的區域。也就是說,它不會而不是工作,如果我點擊/按任何文字和圖像區域(因爲沒有聽衆添加到它)。我必須特別點擊/按下外部容器的「空白」區域。顯然,這是沒有意義的,因爲我想讓整個容器在用戶點擊/按下任何位置時以同樣的方式作出反應。

什麼是最好的方法/實踐來實現呢? (我發現在許多內部容器中添加相同的監聽器有點多餘。)

+0

答案能解決您的問題嗎? – Diamond

回答

3

您的方法在真實設備上無法正常工作。

創建一個按鈕並將其添加到您的actionListener並將外部容器的leadComponent設置爲該按鈕。

Button btn = new Button(""); 
btn.addActionListener(e -> { 
    //Your action here 
}); 
outerContainer.setLeadComponent(btn); 

您不必將該按鈕添加到您的容器,只需將它設置爲leadComponent。

+0

是的,這工作。謝謝!但是,它現在將該Button發送到(ActionEvent actionEvent)的getSource()方法中。我必須通過實例化Listener來構造一個接受外部容器作爲參數的構造函數(這樣我可以響應正確的外部容器)。我不認爲這會導致任何問題/內存泄漏,所以我認爲這很好。謝謝! – ikevin8me