2010-06-16 3 views
1

확인하지 않고 해고 고객이 버그를 재생산합니다. 기본적으로 JCheckBox가 화면 왼쪽에 나열된 일련의 항목이 있습니다. 우리는 이런 식으로 뭔가를 보이는 JPanel에 대한의 MouseListener 세트를 가지고 : 녹화를 바탕으로의 MouseListener이 하나가 꽤 미친 JCheckBox에

private MouseAdapter createMouseListener() { 
    return new MouseAdapter(){ 
     public void mousePressed(MouseEvent e) { 

      if(e.getComponent() instanceof JCheckBox) { 
       // Do stuff 
      } 
     } 
    }; 
} 

, 그들이 단지 체크 박스 중 하나 위의 클릭 매우 강하게 나타납니다. 그 후,이 청취자가 해고되고 "Do stuff"블록이 발생했다는 것이 내 믿음입니다. 그러나, 그것은 상자를 체크하지 않았다. 그런 다음 사용자는 상자가 선택되지 않았 음을 확인하여 클릭했습니다. 이로 인해 "Do stuff"블록이 다시 시작되어 처음 수행 한 작업이 취소되었습니다. 이번에는 상자가 확인되었습니다. 따라서 사용자는 상자가 선택되었다고 생각하고 모양은 비슷하지만 상자를 두 번 클릭했을 때 상자가 선택되지 않았다고 생각합니다.

전혀 가능합니까? 내 삶을 위해, 나는 그것을 재현하거나 그것이 가능할 수있는 방법을 볼 수 없다. 그러나 클라이언트가 서버에 보낸 녹음과 데이터를 기반으로, 나는 다른 논리적 인 설명을 볼 수 없다.

도움, 생각, 아이디어 등 많은 도움을 받으실 수 있습니다.

답변

2

사용자가 체크 상자를 클릭했을 수도 있지만 마우스 버튼을 놓기 전에 마우스를 구성 요소에서 멀리 이동 시켰을 수 있습니다. Chechbox는이 시나리오에서 이벤트 스레드 동작에 대해 확신하지는 않지만이 경우 검사하지 않을 것이라고 확신합니다.

+0

이 답변을 읽 자마자 나는 그것이 옳았다는 것을 알고있었습니다. 응용 프로그램을 뽑아서 처음 시도해보십시오. 도와 주셔서 감사합니다! – Morinar

+0

내가 도와 줄 수있어서 다행이야! :) –

1

나는 마우스 이었기 때문에 그것이 체크 박스에을 풀어도 될 것 체크 박스에를 누를 것을 가정 할 수 있다고 생각하지 않습니다. 어쩌면 다음과 같이하면됩니다.

private MouseAdapter createMouseListener() { 
    return new MouseAdapter(){ 
     public void mouseReleased(MouseEvent e) { 

      if(e.getComponent() instanceof JCheckBox) { 
       // And just to be sure.... 
       JCheckBox jcb = (JCheckBox) e.getComponent(); 
       if(jcb.isSelected()) 
       { 
        // Do stuff 
       } 
      } 
     } 
    }; 
}