2013-04-13 4 views
1

나는 reminderList이라는 목록을 가지고 있습니다.마우스 종료 이벤트에서 타이머를 시작하고 마우스 입력 이벤트에서 동일한 타이머를 중지하는 방법은 무엇입니까?

마우스가 목록의 항목을 클릭하고 마우스가 목록에서 나 오면 타이머가 시작되기를 원합니다.

마우스가 목록에 들어가면 타이머가 계속 실행되고 있으면 타이머를 중지하고 싶습니다.

마우스가 목록을 다시 벗어나면 같은 타이머가 다시 시작되기를 원합니다.

public void waitReminderList(int status) { 
    Timer timer = new Timer(10000, new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      reminderList.clearSelection(); 
      dismissReminder.setEnabled(false); 
     } 
    }); 
    if (status == 0) { 
     if (!reminderList.isSelectionEmpty()) { 
      timer.setRepeats(false); 
      timer.restart(); 
      timer.start(); 
     } 
    } else if (status == 1) { 
     if (!reminderList.isSelectionEmpty()) { 
      timer.stop(); 
     } 
    } 

private void reminderListMouseExited(java.awt.event.MouseEvent evt) {           
    waitReminderList(0); 
} 

private void reminderListMouseEntered(java.awt.event.MouseEvent evt) {           
    waitReminderList(1); 
} 

문제는 : 타이머가 중지하거나 다시 시작하거나 시작 후 아무것도 할 수 있지만 내가 그것을 할 필요가 없습니다.

문제점에 대한 내 해결책은 int가 있어야하고 타이머가 int의 값에 의해 원하는 것을 제어 할 수 있습니다. 하지만 작동하지 않았어 타이머가 멈추지 않아 ...

그래서 내가 뭘 잘못하고 있니?

나는 이와 같은 다른 질문이 있다는 것을 알고있다. 그러나 나는 아직 자바에 대해 상당히 익숙하지 않으며 주어진 답을 이해하지 못한다.

고맙습니다.

+1

if-blocks 안에'System.out.println()'과 함께 디버그 출력을 추가해 보았습니다. 어떤 일을 할 때 어떤 코드에 도달했는지 보셨습니까? –

+0

나는 그것을했다. 그러나 나는 이것을 게시했을 때 그들을 데리고 나왔다. 그들은 나를 도와주지 않았고, 나는 if 문이 작동하는 것을 보았다. 그러나 제안에 감사드립니다! –

답변

1

waitReminderList() 메소드에 새 Timer를 계속 작성하지 마십시오. Timer를 클래스 변수로 정의해야합니다.

그런 다음 필요에 따라 중지하거나 시작하십시오.

+0

좋아, 내가 이것을 시도합니다 –

+0

그것은 고마워! 그것은 지금 많은 의미가 있습니다, 나는 내가 그것을 게시하기 전에 생각했으면 좋겠습니다. –

2

waitReminderList이 호출 될 때마다 새로운 Timer을 생성하는 것이 문제입니다. 이전 실행중인 Timer 개체는 중지되지 않습니다. 당신은 단일 Timer 참조 외부 참조를 이동하기 때문에, 예를 들어. 수업 수준.

+0

고맙습니다. –

관련 문제