這個方法簡單的說,就是用來判斷是否應該彈出右鍵菜單的?不好理解,沒關系,下面一步步來:
對於一個JTable,如何彈出右鍵菜單?沒錯,一般需要加鼠標監聽器,監聽什么?監聽鼠標右鍵,因為我們用鼠標右鍵彈出菜單?對嗎?。。。。。。不對,因為不是所有平台的操作系統都是右鍵彈出菜單,舉個簡單的例子,在我們的Windows下,鼠標設置有個左右手習慣設置,如果設置成左手模式時,你的Swing程序還繼續使用右鍵彈出菜單就不太合適了,但並不是說你不能這么做,只是這樣做了會使Swing程序的系統貼合性不太好。
對了,正確的做法就是不要去判斷什么鼠標右鍵,直接用isPopupTrigger()方法進行判斷用戶是否要求彈出菜單,不過,這里需要注意一點,MouseListener有5個回調方法,具體需要在那個回調方法中用isPopupTrigger()方法判斷呢?這個地方就需要考慮誇平台特性了,舉個例子,windows下的右手習慣是鼠標右鍵放開時彈菜單,所以需要在mouseReleased方法中做回調處理,這里重點不是左右手,而是鼠標放開動作,所以無論是左手還是右手都在mouseReleased方法中處理,其他方法中的isPopupTrigger()都會返回false,但是在Solaris平台下是在鼠標按下時彈菜單,而不是windows中的鼠標放開,可以留意一下這2個平台下的native程序右鍵菜單是否是這樣。這樣的話,在Solaris平台上,需要使用mousePressed回調方法處理,其他回調方法中的isPopupTrigger()都會返回false。那要同時處理這2個平台怎么辦?簡單,2個回調方法都實現,使用isPopupTrigger()判斷,windows下和Solaris下會通過isPopupTrigger()走不同的分支處理。一般來說,這2個方法就夠了,但如果Java跨了一個奇怪的平台,這個平台使用鼠標進入組件作為彈菜單的方式,那么你就必須要實現mouseEntered回調方法了。所以,如果你的Swing程序需要跨所有平台,包括以后可能要支持的平台,那么建議你實現MouseListener所有的回調方法。