2013-05-17 47 views
0

我正在Mac OS上編寫一個swing應用程序,並希望我的上下文菜單出現在JList出現時按住Ctrl單擊以及當我右鍵單擊。現在的問題是,按Ctrl單擊總是清除不是我想要的選擇(想象一下文件瀏覽器中允許用戶刪除選定文件的上下文菜單)。使控制單擊行爲就像右鍵單擊JList

是否有一種簡單的方法可以讓按住Ctrl鍵的鼠標在選擇上表現得像右鍵單擊一樣?

回答

2

有一個更簡單的方法來實現這一點:使用setComponentPopupMenu,它會照顧所有額外的工作和操作系統特定的右鍵單擊問題。

我在Windows和Mac測試(和它的作品):

import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JMenuItem; 
import javax.swing.JPopupMenu; 
import javax.swing.SwingUtilities; 

public class TestJPopup { 

    protected void initUI() { 
     JFrame frame = new JFrame(TestJPopup.class.getSimpleName()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPopupMenu popupMenu = new JPopupMenu(); 
     popupMenu.add(new JMenuItem("One")); 
     popupMenu.add(new JMenuItem("Two")); 
     popupMenu.add(new JMenuItem("Three")); 
     JList list = new JList(new String[] { "Hello", "World", "Something", "Else", "Out", "Of", "Ideas" }); 
     list.setComponentPopupMenu(popupMenu); 
     frame.add(list); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TestJPopup().initUI(); 
      } 
     }); 
    } 
} 

或者(但似乎沒用),你可以使用的方法java.awt.event.MouseEvent.isPopupTrigger()知道你是否應該顯示JPopupMenu與否。

+0

太好了,謝謝! – user1573546

+0

哦,我剛剛意識到,在我的具體情況下,這不會如此輕鬆,因爲我根據當前選擇動態構建菜單。我將不得不重新組織我的代碼,以便在選擇更改時重新生成菜單。我會研究這一點。 – user1573546