2013-12-20 2 views
1
내가 여기에 내가 노력하고 방법을 두 번 클릭 리스너 를 추가 할 ..Now 내가가 JScrollPane를 사용하고 Model을 통해 그것을 채우기입니다

...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에 대해 더블 클릭으로 처리하고 싶은 경우는, JList에 MouseListener를 추가해주세요.

실제로 더 나은 접근을 위해 List Action을 확인하십시오. Action을 생성하고 두 번 클릭하거나 Enter 키를 사용하여 액션 호출을 지원할 수 있습니다. 잘 설계된 GUI는 마우스 나 키보드로 작동해야하기 때문입니다.