2012-02-19 3 views
24

저는 JFrame이있는 프로그램을 작성하고 있는데, 그 중 하나의 컴포넌트를 추가하고 프레임을 다시 채우고 싶습니다. 내가 지금까지 가지고하는 것은 (에서 startPanel가 JPanel을 구현 JFrame의를 구현하는 객체에서 호출) 아래의 코드 같은 것입니다 : 내가 코드를 실행할 때 빈 창 (안에서 startPanel)를 보여줍니다, 그러나Java의 JFrame에서 모든 구성 요소를 제거하는 방법은 무엇입니까?

removeAll();  
startPanel = new StartPanel(); 
startPanel.setVisible(true); 
add(startPanel); 
revalidate(); 
repaint(); 

창을 최소화/크기 조정하면 창이 검은 색으로 변합니다. removeAll()을 생략하고 이미 JFrame에 요소가 없으면 startPanel이 제대로 표시됩니다. 실제로 모든 것을 제거하는 방법에 대한 아이디어를 얻은 다음 새 패널을 계속 표시 하시겠습니까?

+1

하나 개의 단어를 업데이트 할 thoes 구성 요소를 추가 후 확인 후 다른 뭔가를 추가하는 것입니다 가정 : [CardLayout (HTTP : // docs.oracle.com/javase/tutorial/uiswing/layout/card.html) –

+0

@HovercraftFullOfEels 작동하지만 수동으로 수행 할 수있는 다른 방법이 있습니까? 왜 removeAll()이 제대로 작동하지 않는가? 코드의 다른 부분에서 한 번에 하나씩 표시되는 것뿐만 아니라 다른 구성 요소의 일부 조합이 필요할 경우 어떻게해야합니까? 그렇다면 CardLayout을 원하지 않습니까? – scaevity

답변

44

당신은

getContentPane().removeAll(); 

removeAll()

가 필요에 따라 contentPane에 전달 add() 또는 remove()로 대체되지 않은 호출해야합니다.

+0

고마워,이게 효과가있는 것 같아! – scaevity

+0

@scae : Kavka는 우리보다 더 날카로운 눈을 가진 것처럼 보입니다. 좋은 잡기와 1+. –

+0

간결하고 도움이되는 대답에 감사드립니다. 'removeAll()'은 당신이 묘사 한 방식대로'add()'와'remove()'처럼 실제로 오버라이드되어야합니다. 자바의 이상한 버릇 중 하나 뿐인 ... – Variadicism

5
getContentPane().removeAll(); 
getContentPane().repaint(); 
+0

'repaint()'를 사용하지 않았고 제대로 실행됩니다. –

3

당신의 목표는 분명 당신이 호출해야 프레임이 그것을

getContentPane().removeAll(); 
add(new component); 
validate(); 
관련 문제