2013-06-10 3 views
0

3 초 후 이미지가 자동으로 변경되는 창을 만들고 싶습니다. 이 내 코드입니다 :왜 JPanel을 한 번만 다시 그리는가?

JFrame frame=new JFrame(); 
pan pane= new pan(); 
frame.add(pane); 
frame.setBounds(100, 100, 500, 500); 
frame.setVisible(true); 



    try{ 
     for(int i=0;i<returnedArray.size();i++){     
      pane.img=returnedArray.get(i).getFrontImage(); 
      Thread.sleep(3000);  
      pane.repaint(); 
     } 
    }catch(InterruptedException e){ 
     e.printStackTrace(); 
    } 


class pan extends JPanel{ 
    public Image img; 

    public void paint(Graphics g) { 
      g.drawImage(img, 0, 0, null); 
    } 
} 

... 그러나 나는 마지막 이미지를 나는 어쩌면 JVM 내 코드를 개선하고 있다고 생각 :(

모든 시간을 볼

가 어떻게이 문제를 방지 할 수 있습니다? 은 어쩌면 내가 잘못하고있는 중이 야?

내가 어떤 단서 : 매우 gratefull 될 것

+5

GUI 스레드를 차단하고 있습니다. 'Thread.sleep' 대신 스윙 타이머를 사용하십시오. –

+0

컴파일 된 코드를 보여줄 수 있습니까? –

+0

'paint (Graphics)'메소드가 아닌'paintComponent (Graphics)'메소드를 오버라이드 (override)합니다. 또한 메소드에서'super.paintComponent (g)'를 호출하십시오. –

답변

1

이 문제가 FO에서이 줄 수 있을까 루프 :

pane.img=returnedArray.get(2).getFrontImage(); 

항상 동일한 이미지를 선택하나요? 이 외에도 Thread.sleep 대신에 주석에서 지적한 Timer를 사용해야합니다.

+0

타이머가 문제를 해결합니다. 번호 "2"는이 페이지에서 코드 형식을 지정할 때의 실수입니다 :) 내 게시물에서이를 수정합니다. 고맙습니다! – ognistysztorm

관련 문제