2017-03-02 4 views
-1

私は、JFrameの全領域を占めるJListをそれに含むStringを持っています。問題は、ユーザーが右クリックしたときに、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を使用するときにJPopupMenuを使用する必要があることを除いて、コードは妥当に見えます。私は問題を理解しているか分からない。問題を示す適切な[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

関連する問題