2011-05-11 7 views
1
if(incasationBegin > 0) 
{ 
    int anwser = JOptionPane.showConfirmDialog(null, Config.QUESTION,"Confirm", JOptionPane.YES_NO_OPTION); 
    if(anwser == 1) 
    { 
     jList0.setSelectedIndex(incasationBegin); 
     return; 
    } 
} 
incasationBegin = jList0.getSelectedIndex(); 

어떻게 setSelectedIndexjList0ListSelectionValueChanged 조치를 호출하지 않고 있습니까? 왜냐하면 옵션 확인 팝업을 클릭했을 때 아니오를 클릭하면 새 항목이 선택되기 때문입니다. 나는 회신하기 전에 incasationBegin =0;을 추가하려고 시도했지만, 처음 클릭 확인 팝업에.자바 DefaultListModel

+1

코드와 설명이 있더라도 여전히 따라 가지 않습니다. 정교하게 설명하거나 좀 더 명확하고 간결하게 설명해 주시겠습니까? – mre

+0

'jList0.setSelectedIndex (incasationBegin);을 호출 한 후''jList0ListSelectionValueChanged' 액션이 호출되었고, 나는 이것을 원하지 않습니다. ?? –

+0

선택/선택 취소가 완료 될 때마다 'valueChanged'가 트리거됩니다. 따라서 이것이 일어나기를 원하지 않는 것은 매우 부 자연스러운 것처럼 보입니다. 어쨌든, 브라우징 조금 내가 다음 링크를 착륙 - http://stackoverflow.com/questions/3092834/can-i-set-the-selected-item-for-a-jlist-without-having-an-event 던지다 – mre

답변

2

내가 올바르게 당신을 이해하는지 보겠습니다. JListListSelectionListener을 추가하고 setSelectedIndex 전화가 valueChanged 이벤트를 시작하지 못하도록 하시겠습니까?

현재 서로 다른 접근 방식을 많이 시도 할 수 있습니다 : 같은 방법으로 jList0.addListSelectionListener(...

  1. 지연 전화를 당신이 setSelectedIndex를 호출 할 때 더 리스너가 존재하지 않음.
  2. 수신기에 valueChanged 메서드가 "활성화 된 조건"을 확인하도록하십시오 (예 : boolean isEnabled). setSelectedIndex을 호출하기 전에이 조건을 false로 설정하고 그 후에 true로 설정하십시오.
  3. setSelectedIndex으로 전화하기 전에 jList0.removeListSelectionListener(..으로 전화하십시오. 호출 후 리스너를 목록에 다시 추가하십시오.