2014-03-07 2 views
3

'x'를 JList의 항목으로 둡니다. 처음 클릭하면 이벤트가 실행되고 다시 클릭하면 이벤트가 실행되지 않습니다. 다른 항목을 클릭하고 'x'로 돌아와야합니다.JList에서 현재 선택된 항목을 클릭 할 때 이벤트를 발생시키는 ListSelectionEvent

다른 항목을 다루지 않고도 'x'에서 반복적으로 이벤트를 실행할 수 있습니다.

내 코드입니다 :

public void valueChanged(ListSelectionEvent e) { 

    if (e.getValueIsAdjusting() == false) { 

     if (list.getSelectedIndex() == -1) {} else { 
      String clicked = (String)list.getSelectedValue(); 



      //method to fire is here 

     } 
    } 
    updateDisplays(); 

} 
+0

'MouseListener'를 추가하고 클릭 수를 볼 수 있습니다. 선택을 변경하는 클릭은'MouseListener'와'ListSelectionListener'를 실행합니다. 하지만 이것은 목록에서 이미 선택된 항목에 대한 클릭에 중요성을 부여하기 위해 비정상적인 UX 결정과 같은 것으로 보입니다. 너 뭐하려고? –

+1

* "어떻게하면 'x'에서 반복적으로 이벤트를 실행할 수 있습니까?"* 왜 반복적으로 실행해야합니까? 이것은 고전적인 [XY 문제] (http://meta.stackexchange.com/q/66377/155831)처럼 보입니다. 실제 기능 *을 구현하려고하는 것이 무엇입니까? –

+0

사용자가 입력하는 명령의 JList를 만들고 있습니다. JList는 사용자의 이전 명령을 추적하므로 사용자가 명령을 반복하려면 JList에서 명령을 클릭 할 수 있어야합니다. @JasonC – MMP

답변

3

ListSelectionListener이 목록의 선택의 변경을 반영, 당신은 ... 대신 MouseListener ... 예를 들어

사용할 수

MouseListener ml = new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent evt) { 
     if (SwingUtilities.isLeftMouseButton(evt) && evt.getClickCount() == 1) { 
      if (list.getSelectedIndex() != -1) { 
       int index = list.locationToIndex(evt.getPoint()); 
       System.out.println("You clicked item @ " + index); 
      } 
     } 
    } 
} 

list.addMouseListener(ml); 
1

MouseListener을 추가하고 클릭 수를 주시 할 수 있습니다. 선택을 변경하는 클릭은 MouseListenerListSelectionListener을 모두 실행합니다.

또 다른 옵션은 즉시 ListSelectionListener에서 선택을 취소하는 것입니다. 이렇게하면 다음 클릭이 다시 선택되고 다시 트리거됩니다. 그러나 키보드로 항목을 탐색 할 수있는 기능은 없어집니다.

그러나 이것은 목록에서 이미 선택된 항목의 클릭에 중요성을 할당하는 것과 같은 일종의 UX 결정과 같습니다.

질문에 따라 추가 : MouseListener 경로를 사용하는 경우 클릭 한 번으로 작업을 실행하면 한 번 클릭하는 대신 두 번 클릭하는 것이 좋습니다 (특히 작업이 데이터를 변경하고 실행 취소 할 수없는 경우).). 또한 ListSelectionListener은 사용자가 의도하지 않은 키보드로 목록을 탐색 할 때 작업을 실행합니다.

당신의 기록 목록에서 명령을 를 입력하는 경우, 당신은 또한 역사에서 선택 명령 텍스트로 채 웁니다 않는 두 명령 입력 기록 목록에 대한 드롭 다운 콤보 상자를 사용하여 고려할 수 실행되지 않습니다. 또한 명령 기록에서 자동 완성 기능을 추가 할 수 있습니다.

관련 문제