2014-02-05 8 views
0

복잡한 JPanel을 가지고 있는데, 구성 요소로 다양한 중첩 JPanel을 가지고 있습니다.자바 업데이트 JPanel 구성 요소를 제거하지 않고

중첩 된 패널 중 하나를 새 패널로 바꾸고 싶습니다. 하지만 내가 삭제하고 다시 그들 모두를 추가하지 않는 최상위 패널 새로운 구성 요소로 다시 그릴 수 없습니다

JPanel topLevel = new JPanel(); 
JPanel upperPane = new JPanel(); 
JPanel lowerPane = new JPanel(); 

JPanel infoPane = new JPanel(); 

upperPanel.add(infoPane); 
topLevel.add(UpperPane); 
topLevel.add(lowerPane); 

// 위 (psuedocode) 디스플레이를 잘.

infoPane = new JPanel(); //Changed this Panel somehow; 

topLevel.revalidate(); 
topLevel.repaint(); 

가 // 위의 2 개 라인은 새로운 정보를 표시하지 않습니다 // 이제 내가 원하는.

어떻게 업데이트 할 수 있습니까?

+0

_ "어떻게 업데이트 할 수 있습니까?"_ _ 바꾸려 고 시도하는 대신'CardLayout'을 사용하십시오. [** this example **] (http://stackoverflow.com/a/21460065/2587435) –

+0

@peeskillet 시작시 모든 "카드"를 만들어야하므로 필요하지 않습니다. 첫 번째 카드를 표시 한 후에는 기본 카드를 변경할 수 없습니다. – ManInMoon

+0

게시 [MCTRE] (http://stackoverflow.com/help/mcve) –

답변

0

new JPanel()을 호출하는 경우 메모리의 다른 지점을 참조합니다. 따라서 JPanel (이전 upperPanel)에 대한 참조가 손실되고 이후에 infoPane의 변경 내용이 표시되지 않습니다.

직접 해보지는 않았지만 new을 호출하지 않고 infoPane을 변경해 주셔서 감사합니다.

+0

불행히도 차트를 얻으려고 새 라이브러리를 사용하도록 라이브러리를 사용하고 있기 때문에 불행히도 그럴 수 없습니다. – ManInMoon

+0

그런 다음 단순히'upperPanel.add (infoPane);'를 반복하십시오. 'new'를 호출하면 표시된 "JPanel"을 더 이상 참조하지 않으므로 변경 사항을 추가 할 때까지 보이지 않습니다. – Ben

+0

하지만. 먼저 upperPanel에서 제거해야합니다. 문제는 내가 때로는 제거하고 다시 추가하는 사이에 때때로 화면 결함을 얻는다는 것입니다. 심지어는 연속적인 라인 이어도 – ManInMoon

0

FWIW, 당신이 묘사하는 디자인 패러다임은 나에게 어색한 것처럼 보입니다. 원래의 InfoPane 인스턴스를 계속 사용하고 내용을 다시 그리는 것이 더 간단하지 않습니까? 그런 다음 topLevel 패널에 변경 사항이 포함될 필요는 없습니다.

그래서 new()를 호출 할 때 라이브러리가 제공하는 것이 무엇이든지 infoPane에 표시하고 new()를 사용하여 infoPane에 새로운 WhateverItIs()를 추가하면됩니다.

당신의 맥락에서 작동합니까?

희망이 도움이됩니다.

+0

그건 내가 원하는 와트 일 것입니다. 그러나 불행하게도 중첩에서 아래쪽으로 내려가는 "새로운"것을 사용하면 상위 패널은 그렇지 않습니다. 변화를 인식하십시오. – ManInMoon

관련 문제