2014-04-17 3 views
0

JFrame에서 구성 요소를로드하는 데 문제가 있습니다. 창을 재사용 할 때까지 구성 요소가 나타나지 않습니다. 나는 그 문제에 대해 검색하고있는 해결책을 찾기 :내 응용 프로그램의 크기를 조정할 필요없이 스윙 구성 요소를 표시합니다.

Thread repainter = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       while (true) { // I recommend setting a condition for your panel being open/visible 
        frame.repaint(); 
        try { 
         Thread.sleep(30); 
        } catch (InterruptedException ignored) { 
        } 
       } 
      } 
     }); 

     repainter.setName("Panel repaint"); 
     repainter.setPriority(Thread.MIN_PRIORITY); 
     repainter.start(); 

문제는 그 첫 번째 후 또 다른 구성 요소를로드,하지만 때 나는 여전히 크기를 조정해야 처음으로 내 aplication를로드이 작동합니다.

이 문제를 해결하기위한 더 나은 해결책을 알려 드리겠습니다.

미리 감사드립니다.

+0

전화 frame.validate()와 frame.repaint(). – ultrajohn

+0

1) 더 나은 도움을 받으려면 [MCVE] (http://stackoverflow.com/help/mcve) (최소 완료 및 검증 가능 예제)를 게시하십시오. 2) 해당 코드는 EDT 규칙을 위반합니다. 자세한 내용은 [스윙의 동시성을 (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)를 참조하십시오. –

답변

1

프레임의 validate() 메서드도 호출해야합니다.

예컨대

frame.repaint(); 
frame.validate(); 

출처 : 함께 more information here

+0

그게 잘 작동합니다. 고맙습니다! – Altair

+0

@Crypto 확인. 그런 다음 이것을 정답으로 받아 들여야합니다. :) – ultrajohn

+0

나는 이미 그것을했다 : P – Altair

1

당신은 사용을 eather 수 있습니다

는거야
pack(); 

이 창은 서브 컴퍼넌트의 추천 사이즈 및 레이아웃에 맞게 크기가되도록합니다. 윈도우 및/또는 그 소유자가 아직 디스플레이 가능하지 않은 경우, 바람직한 사이즈를 계산하기 전에 둘 모두 디스플레이 가능하게된다. preferredSize가 계산 된 후에 Window의 유효성이 검사됩니다.

또는 당신은 가로 폭과 높이 높이를 가지도록이 구성 요소의 크기를 조정하기 위해

setSize() 

를 사용할 수 있습니다.

+0

'setSize()'를 사용하지 말고'pack()'을 사용하십시오. 크기를 설정하는 것은 추측이므로 구성 요소를 표시하는 데 필요한 정확한 (최소) 크기가됩니다. E.G. [이 답변] (http://stackoverflow.com/a/5630271/418556)에서 볼 수 있습니다. 아이러니하게도이 코드는 새로운 컴포넌트를 추가하는 대신 * PLAF change, *에서'pack()'을 호출합니다.이 GUI는 UI를 압축 할 필요없이 스크롤 창에 표시됩니다! ;) –

1

전화 setVisible 마지막으로, 당신은 기본 UI 초기화 한 후

관련 문제