2013-12-20 64 views
1

我使用JScrollPane中,並通過Model填充它..Now我想補充雙擊監聽 在這裏,我如何我試圖...如何在JScrollPane中添加雙擊功能?

PlayListScrollPane.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent mouseEvent) { 
       JList theList = (JList) mouseEvent.getSource(); 
       if (mouseEvent.getClickCount() == 2) { 
        int index = theList.locationToIndex(mouseEvent.getPoint()); 
        if (index >= 0) { 
         Object o = theList.getModel().getElementAt(index); 
         System.out.println("Double-clicked on: " + o.toString()); 
        } 
       } 
      } 
     }); 

PlayListScrollPaneJScrollPane ... 上述方法永遠不會觸發了... 謝謝。

回答

0

OK ..我把它修好了,實際上我是在錯誤的課上加了MouseListener。我只是遵循這個tut,並達到我想要的。

0

你的問題是,你的clickCount應該是不在監聽器內部的類的變量。就像:

private clicksCount = 0; 

而且,如果它也被實例化,你可以訪問列表。然後:

PlayListScrollPane.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent mouseEvent) { 
     clicksCount++; 

     if (clicksCount == 2) { //Or clicksCount%2==0 
      int index = myJList.locationToIndex(mouseEvent.getPoint()); 
      if (index >= 0) { 
       Object o = theList.getModel().getElementAt(index); 
       System.out.println("Double-clicked on: " + o.toString()); 
      } 
      clicksCount=0;//If you use clickCounts%2==0 you don't need this line 
     } 
    } 
}); 
0

你或許應該將監聽器添加到視口而不是滾動窗格

試試這個:

PlayListScrollPane.getViewport().addMouseListener(new MouseAdapter() { ... 

代替:

PlayListScrollPane.addMouseListener(new MouseAdapter() { ... 
0

的JList theList =(JList)mouseEvent.getSource();

看起來你有一個JList顯示在滾動窗格中。 JList使用MouseListener,因此它將處理MouseEvents。如果您想通過雙擊對JList執行一些處理,請將MouseListener添加到JList。

實際檢查出List Action爲更好的方法。它將允許您創建一個Action,然後通過使用雙擊或Enter鍵來支持Action的調用,因爲設計良好的GUI應該通過鼠標或鍵盤來工作。