2013-08-01 8 views
12

JPanel에서 이미지를 표시하는 스윙 응용 프로그램이 있습니다. 앱에서 이미지를 생성 할 수없는 경우 JPanel에서 이전 이미지를 제거하고 JTextField 및 메시지로 대체하려고합니다. 텍스트 필드를 추가 할 수는 있지만, 그 자체는 JPanel의 서브 클래스 인 이전 내용 위에 그려집니다. 다음은 내가 가지고있는 것입니다 :JPanel removeAll은 이전 구성 요소를 제거하지 않습니다.

private void displayMessage(String message) { 
    JTextField tf = new JTextField(message); 
    cdPanel.removeAll(); 
    cdPanel.add(tf, BorderLayout.NORTH);//tried lots of variations, inc. no layout  
    cdPanel.validate(); 
} 

어떻게하면 완전히 다시 그릴 수 있습니까?

+0

당신이'cdPanel.revalidate를 호출 시도했다의

cdPanel.revalidate(); cdPanel.repaint(); // This is required in some cases 

를(); cdPanel.validate() 대신에 cdPanel.repaint()'? 또한이 'JPanel'에 이미지가 어떻게 표시됩니까? 'JLabel'을 사용하고 있습니까, 아니면'JPanel'에서 직접 그리는 겁니까? –

+1

@nIcEcOw 감사합니다. 완벽하게 작동합니다. 귀하의 답변을 표시 할 수 있도록 게시하십시오 :-) – jaybee

+0

당신은 가장 환영 받고 있습니다 .-)하지만 다음 번에 정보를 최대한 제공하려고 노력하십시오. 마치 어린 아이에게 설명하는 것처럼, __ 뭐하는거야? __, __ 기대하고있는 것 __ 그리고 __ 무슨 일이 있었 니? __ 이쪽으로 대답하는 사람은 주어진 상황에 대해 더 나은 통찰력을 줄 수 있습니다 :-) –

답변

25

당신은 단순히 호출 시도 할 수 있습니다 : 대신

cdPanel.validate(); 
+1

고마워요! 얼마 동안 나를 구했다. –

+0

@nIcEcOw : 고마워, 이것은 매력처럼 일했다. 당신의 대답에 대해 많은 것을 감사드립니다. – John

+0

@ 존 : 당신은 가장 환영 받고 있습니다 .--) –

3

예측할 수없는 대기 시간을 처리하는 경우 here과 같이 SwingWorker을 사용하여 백그라운드에서로드를 수행하십시오. 이 예제에서는 pack()을 사용하여 레이블의 크기를 이미지의 크기로 조정하지만 here과 같이 고정 크기 격자를 사용하고 이미지의 크기를 조정할 수 있습니다.

관련 문제