2014-04-22 3 views
1

간단한 신청을하고있어, 하나의 문제가 있습니다.버튼의 아이콘을 즉시 변경하고 싶습니다

버튼의 아이콘을 코드에서 immediatly 바꾸고 싶지만 메소드가 끝난 후에 작동합니다.

여기 내 코드입니다. 내가 버튼을 클릭

public void actionPerformed(ActionEvent e) { 

.. 
*some code* 
.. 

Buttons[Id].setIcon(images.get(Id)); 

Thread.currentThread().sleep(2000); 


.. 
    *Some code* 
.. 
} 

는,이 ActionListener 방법 actionPerformed를 호출합니다.

Buttons[Id].setIcon(images.get(Id));는 아이콘을 변경해야합니다,하지만 나는 그것을 immediatly 작동 할 수있는 방법

Thread.currentThread().sleep(2000); 

후 변경?

일부 발송자 또는 무엇?

감사

+0

에서 자세한 내용을 참조하십시오? – ObedMarsh

+0

어쩌면 repaint() before sleep()? – Valen

+0

EDT (Event Dispatch Thread)를 차단하지 마십시오. GUI가 발생하면 '고정'됩니다. 'Thread.sleep (n)'을 호출하는 대신에 태스크를 반복하기 위해 Swing Timer를 구현하거나 장시간 실행되는 태스크를 위해 SwingWorker를 구현하십시오. 자세한 내용은 [스윙의 동시성을 (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)를 참조하십시오. –

답변

1

대신하는 방법의 중간에 잠을하려고의 javax.swing.Timer를 사용합니다. 당신은 EDT가 아이콘을 설정하는 것을 막고 있습니다. 당신이 정확하게 수면 부분이 필요합니까 왜

Buttons[Id].setIcon(images.get(Id)); 
Timer timer = new Timer(2000, new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
     // do something 
    } 
}); 
timer.setRepeats(false); 
timer.start(); 

How to Use Swing Timers

관련 문제