→ AI3767:我覺得他的問題只是想問怎麼知道menu現在是否有點開 07/21 18:59
→ sbrhsieh:要討論這個也OK,不過這是腳痛就把腳鋸掉的解法.... 07/21 20:43
→ a60301:我的問題比較偏向於若super.paint(g)了畫面會閃爍 07/21 21:08
→ a60301:可是不這麼做畫面就只剩下我的畫面… 07/21 21:15
→ a60301:我還是乖乖開content pane好了,這樣也比較正確 07/21 21:17
推 a60301:謝謝你的分析,我會繼續研究的 07/21 21:21
推 a60301:果然開個JPanel塞進原本的JFrame就解決了,謝謝哦w 07/22 15:14
推 a60301:雖然解決了,但還是很想知道怎麼判斷menu有沒有被點開… 07/23 02:58
龜毛重申一點:如果你好奇的是能不能透過偵測 menu 選單出現的時機,來對你
原本的程式做點改善的話,我還是會勸你省下這些時間去做其他的 study。
偵測 menu 有無出現是可以的,通常會使用到這個機制往往會是想要在選單出現之前
做點手腳(比如說選單中的某些選項與其他的組件的狀態有關)。
JMenu 會額外使用一個 JPopupMenu 來顯示他所管理的 menu items:
http://docs.oracle.com/javase/6/docs/api/javax/swing/JMenu.html#getPopupMenu()
你可以向這個 popup menu 註冊 listener 去觀察 popup menu 哪時出現/消失/取消。
http://docs.oracle.com/javase/6/docs/api/javax/swing/JPopupMenu.html#addPopupMenuListener(javax.swing.event.PopupMenuListener)
如果就 JMenuBar 上的根 menu,你也可以向 JMenu 註冊 listener 來偵測被該 menu
被點選(滑鼠或鍵盤)的事件:
http://docs.oracle.com/javase/6/docs/api/javax/swing/JMenu.html#addMenuListener(javax.swing.event.MenuListener)
兩種做法基本上都可以做到你希望偵測到選單出現的事件,前者相關事件的發生點
比後者更接近"選單出現"這一回事。若你想要偵測的對象還要包括 sub menu(子選單)
那麼你只能使用前一種做法,因為對 sub menu 來說,select menu 與 menu 選單
彈出可以是分成兩個操作階段(當使用鍵盤來操作時),JMenu 成為 selected
不必然會接著秀出所使用的 JPopupMenu。
※ 編輯: sbrhsieh 來自: 218.164.105.89 (07/23 18:43)
推 a60301:我處理的方式是開一個JPanel來畫畫面,所以不用擔心腳痛斷腳 07/23 20:12
→ a60301:感謝回復,有學到想學的了,謝謝你的龜毛讓我寫得更好! 07/23 20:14