2011-04-22 4 views
1

나는이 코드를 숨기고 버튼을 숨긴 다음 계속해야하는이 학교 프로젝트를 가지고 있지만 계속 진행하지만 버튼을 숨 깁니다.버튼을 숨긴 다음 버튼을 클릭 한 후 다시 표시하기 전에 2 초 동안 기다립니다.

단추 누름으로 시작되는 클래스가 하나 있는데, 단추를 숨겨야하는 다른 메서드가 시작된 다음 완벽하게 수행되는 여러 클래스를 수행하는 다른 클래스의 메서드를 시작한 다음 제 3의 클래스에서 3 번째의 메소드를 기동합니다. 우선, 슬립해야하지만, 버튼을 감추기 전에자는 것이고, 버튼을 숨기는 것은 완전히 건너 뜁니다. 여기

는 (덴마크 값/메소드 이름을 신경 쓰지 않는) 코드의 일부입니다

public void turncard(final int navn,boolean spiller){ 
    knap.setVisible(false); 
    EqualCheck.storevalue(this,spiller); 
} 

나는 경우 ..이 부분이 둘러싸여 알고 있지만이 같은 전화를받을 않습니다. 의,하지만 어떻게 mythread을 일시 중지하는 데 사용할 수 있습니다 :

if(spiller){     //tester om det er spilleren der har vendt kort, 
    kort.repaint();    //og hvis det er, så starter den computerens 
    Main.spillet.computertur(); //tur. 
} 

다음 내가 EDT에 더 있어야 invokeAndWait 명령에 대해 읽어 않았다

public void computertur() { 
    for(int i = 0; i < kortene.size(); i++) { 
     kortene.get(i).knap.setEnabled(false); 
    } 
    try { 
     Thread.sleep(2000); 
    } catch (Exception e) { 
     System.out.println("sleep failed."); 
    } 

은 "computertur"방법의 시작

... 또는 더 나은 질문인데 왜 버튼을 숨기지 않습니까? :) 내 머리에, setVisible(false) 전화하기 전에 뭔가 다른 일을하기 전에 그것을 숨길 것입니다. 왜 그렇지 않습니까?

+1

마지막 예제 코드가 setEnabled (false) 대신 setVisible (false)을 호출하면 안됩니까? setEnable는 버튼을 클릭 해제 할 수 없게 만들지 만, 숨길 수는 없습니다. – Jberg

+0

set enable은 사용자가 cumputertur()를 실행하는 동안 버튼을 클릭 할 수 없게 만들고 결국 setEnable (false)를 취소합니다. :) – Kezides

답변

2

EDT (Event Dispatch Thread)에서 코드를 실행하는 동안 절대로 Thread.sleep (...)을 호출하지 마십시오. 이렇게하면 GUI가 멈추고 GUI가 다시 그려지지 않습니다.

일반적으로 코드는 버튼을 보이지 않게 설정하는 코드를 제외하고 별도의 스레드에서 실행해야합니다. 자세한 정보 및 솔루션은 Swing 튜토리얼의 Concurrency 섹션을 참조하십시오.

+0

invokeAndWait()가 유용하지만 그냥 볼 수 없습니다. 내 버튼을 숨긴 후에 일을해야 할 때 내 사건에서 어떻게 사용할 수 있습니까? – Kezides

+0

아마도 invokeAndWait()를 사용하지 말아야합니다. 작업을 실행하기 위해 새 스레드를 작성해야합니다. 스레드가 시작되면 invokeLater (...)를 사용하여 버튼을 비활성화합니다. 당신은 Thread.sleep()을 사용합니다. 그런 다음 invokeLater를 사용하여 버튼을 활성화합니다. – camickr

+0

아 .. 나는 .. .. 그걸 시도합니다 .. .. 고마워 .. :) – Kezides

관련 문제