2011-07-27 2 views
3

Java에서 작업중인 이미지 JWindows를 사용하여 이미지를 표시하는 스윙 ... 표시하려는 이미지가 다른 JLabel에 포함되어 있습니다. 이전에 추가 된 구성 요소를 제거하고 새 구성 요소를 추가합니다. 문제는 다음과 같습니다.이미지의 슬라이드 쇼를 표시하기 위해 슬립을 구현하는 방법

코드는 절전 기능없이 완벽하게 작동합니다. 이벤트 완료시 다른 창이나 동일한 창에 모든 이미지를 표시 할 수 있습니다. 그러나 잠자기를 사용하면이 기간 동안 아무 것도 표시되지 않습니다 ...

이미지에 지연을 구현할 수있는 방법이 있습니까? 슬라이드 쇼와 같이 지연 이전에 그려진 이미지를 가지고 있습니까?

  getContentPane().remove(startLabel); 
      getContentPane().add(recordLabel1, "Center"); 
      setVisible(true); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel1); 
       getContentPane().add(recordLabel2, "Center"); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel2); 
       getContentPane().add(recordLabel3, "Center"); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel3); 
       getContentPane().add(recordLabel4, "Center"); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       getContentPane().remove(recordLabel4); 
       getContentPane().add(pausedLabel, "Center"); 
       setVisible(false); 
+0

편집 : 구성 요소를 추가 및 제거하는 대신 고정 된 JLabel에서 이미지를 변경해 보았습니다 ... 작동하지 않았습니다! –

+0

편집 : 다른 이미지가 보이고 보이지 않는 여러 개의 서로 다른 겹쳐진 창을 토글하려고했습니다 ... 작동하지 않았습니다! –

+2

아래의 답변에서 설명하지 않은 것은 아무 일도 일어나지 않는 이유입니다. 코드가 Swing 이벤트 스레드에서 실행되고 잠을 자면 해당 스레드가 일시 중지됩니다. 스윙 구성 요소를 업데이트하고 표시하려면 스레드가 필요합니다. 따라서 잠 들어있는 동안 아무 것도 일어나지 않습니다. –

답변

8

Swing Timers을 사용하기에 좋은 시간입니다.

당신이해야

: 배열이 아닌 타이머 이벤트에

  • 위의 튜토리얼에 표시된대로
  • 가 타이머를 설정
  • 다른 변수

    • 저장 레이블/사진, 단지를 통해 회전 귀하의 레이블 배열

    당신이 필요로하는 것은 귀하가 현재 표시하고있는 사진 번호를 저장하는 클래스의 추가 구성원입니다. 타이머가 시작되면 해당 멤버를 사용하여 창에서 현재 항목을 제거하고 늘려서 (요소의 총 수를 모듈로) 새 멤버를 삽입합니다.

    +1

    +1에 대해 'javax.swing.Timer'; ['ImageLabelPanel'] (http://stackoverflow.com/questions/3078178/jpanel-in-puzzle-game-not-updating/3078354#3078354)도 참조하십시오. – trashgod

    관련 문제