2017-03-02 97 views
-1

我有一個帶有字符串的JList,它佔據了JFrame的整個區域。問題是,當用戶右鍵單擊時,它不必在JFrame中的項目上。只要選擇了一個項目,它就會彈出。所以你可以點擊任何地方,然後右鍵點擊任何地方,菜單會彈出。我該怎麼做才能讓用戶右鍵單擊JList中的某個項目時彈出菜單?這是我到目前爲止有:如何在用戶右鍵單擊JList中的項目時彈出菜單?

list.addMouseListener(new MouseAdapter() 
    { 
     public void mousePressed(MouseEvent e) 
     { 
      if (SwingUtilities.isRightMouseButton(e)) 
      { 
       JList list = (JList) e.getSource(); 
       int row = list.locationToIndex(e.getPoint()); 
       list.setSelectedIndex(row); 

       if(list.getSelectedIndex() != -1) 
       { 
        PopUpMenu menu = new PopUpMenu(); 
        menu.show(e.getComponent(), e.getX(), e.getY()); 
       } 
      } 
     } 
    }); 
+1

代碼看起來很合理,除非在使用Swing時應該使用aJPopupMenu。不知道我明白這個問題。發佈適當的[mcve]證明問題。 – camickr

+0

如果'JList'佔據整個屏幕,則單擊列表上的任何位置將生成鼠標事件。 – MadProgrammer

回答

1

也許您正在尋找這樣的事情:

list.addMouseListener(new MouseAdapter() 
{ 
    public void mousePressed(MouseEvent e) 
    { 
     if (SwingUtilities.isRightMouseButton(e)) 
     { 
      JList list = (JList) e.getSource(); 

      int preferredHeight = list.getPreferredSize().height; 
      int mouseHeight = e.getPoint().y; 

      if (mouseHeight > preferredHeight) 
       return; 

      int row = list.locationToIndex(e.getPoint()); 
      list.setSelectedIndex(row); 
      // show JPopupMenu 
     } 
    } 
}); 

,而忽略列表中的最後一項下方的鼠標事件。

+1

必須測試SelectionModel.isSelected> -1 && SwingUtilities.isRightMouseButton,而不是以編程方式強制選擇 – mKorbel

相關問題