最近閒來無事寫個Eclipse RCP小程序,須要用到一個特性,就是窗口內有兩個視圖,其中一個視圖內有一個TreeView控件,要求點擊TreeView控件上的不一樣節點,另一個視圖可以收到的SelectionChanged事件,而且進行處理。 這是一個很簡單的功能,到網上查了一下,基本上都是一個模式:把左邊的TreeView註冊爲SelectionProvidor,右邊的視圖註冊爲SelectionListener,而且在SelectionChanged()接口內編寫代碼,這樣就實現了所謂的SelectionChanged事件了。 可是,嗯,凡事都怕這個可是,一旦領導跟你說話時在表揚了你半天以後,話鋒一轉說了個可是,你就準備等着捱罵吧。 接着來,可是,這網上的例子都是講到上面就爲止了,意思是這樣就實現了SelectionChanged事件了。那麼這樣作真的就是對的嗎? 我按照網上的說法作了一下,發現這個方法是有問題的。SelectionChanged事件,顧名思義,就是當選擇了TreeView上不一樣的節點纔會觸發,可實際的效果是若是沒有切換節點,屢次點擊在同一個節點上,該事件依然會觸發。這算哪門子SelectionChanged事件啊,簡直就是Clicked事件嘛。 解決這個問題,實現真正的SelectionChanged事件的方法也很簡單,有兩個方案,一個是繼承TreeView類,重載其fireSelectionChanged()接口,判斷確實是不一樣的Selection後,再觸發SelectionChanged事件,另外一個方案是在SelectionListener的SelectionChanged事件內判斷Selection是否確實發生了變化,而後再進行相應的處理。這兩個方案實現起來也很簡單,這裏就不貼代碼了。 最後再說句本身的感慨,這網上的東西的確是多,但是大部分都是人云亦云,轉來轉去,沒有通過本身的思索和判斷,覺得轉了幾篇文章,本身就成了技術專家了。唉,搞技術仍是得老老實實,沒有通過本身驗證和確認的東西,最好不要亂轉,省得貼出來被人笑話。