2012-07-17 2 views
2

이것은 매우 초보적인 질문 인 것 같지만 대답을 모른다.변수를 기존 객체에 대한 참조로 초기화하는 중

Java로 새 JFrame을 생성한다고 가정합니다. 새로운 프레임으로 기본 컨텐츠 창이옵니다. 변수를 선언하고 해당 프레임의 내용 창으로 초기화하면 변수가 프레임의 내용 창에 대한 참조를 초기화합니까 아니면 자체적으로되는 것입니까? 예 :

JFrame frame = new JFrame(); 
Container panel = frame.getContentPane(); 

내가, 예를 들어, 콘텐츠 창의 레이아웃을 변경하고자한다면, panelframe.getContentPane()을 변경하는 것과 같은 효과를 줄 조정하는 것?

frame.getContentPane().setLayout(new GridLayout()); 

이 같은 결과를 만들겠습니까 :

무슨 뜻인지 정확히 표시하려면

panel.setLayout(new GridLayout()); 
그때 나를 필요없이 다음 frame에 반영 panel에 할

윌 아무것도 마지막에 frame.setContentPane(panel);라고 말하면 되나요?

+0

"편의상 add와 그 변형이 필요에 따라 'contentPane'에 전달되도록 재정의되었습니다."- ['JFrame' (http://docs.oracle.com/javase/7/docs) /api/javax/swing/JFrame.html) – trashgod

답변

1

물론입니다. 그들은 메모리에있는 동일한 객체를 가리 킵니다.

두 줄을 풍선에 묶는 것을 상상해보십시오. 당신은 하나를 잡고 (panel으로 전화를 걸자) 다른 문자열을 친구에게 주자. (그를 frame.getContentPane()라고 부르 자.)

친구가 끈을 따라 풍선을 찾아서 모자를 쓰면 (예 : frame.getContentPane().setLayout(new GridLayout());) 끈을 따라갈 때 모자가 달린 풍선이 나타납니다.

0

예 이들은 동일한 Container 개체를 참조합니다.

즉, getContentPane()은 기본이되는 Container에 대한 참조를 반환합니다. 따라서 참조를 사용할 때마다 기본 객체가 사용/영향을받습니다.

1

예. 메모리에있는 객체는 여러 개의 참조를 가질 수 있으며 그 중 하나의 객체에 대한 변경은 모든 객체에 반영됩니다 (모든 객체가 동일한 객체를 가리킴). 자세한 내용은 this example을 참조하십시오.

0

귀하의 코드

JFrame frame = new JFrame(); 
Container panel = frame.getContentPane(); 

은 참으로 프레임의 내용 창에 변수 panel 점을 수 있습니다. panel 그것에 의미 그래서, 컨텐츠 구획의 레이아웃에 영향을 미칠 것입니다

panel.setLayout(new GridLayout()); 

를 호출.

그러나, 일반적인 실수는

JFrame frame = new JFrame(); 
Container panel = frame.getContentPane(); 
//... some more code 

JPanel someOtherFancyPanel = ...; 
panel = someOtherFancyPanel; 

처럼 뭔가를 할 경우 JFrame의 컨텐츠 분할 창 someOtherFancyPanel 될 것이라고 가정하는 것입니다. 이것은 물론 그렇지 않습니다. 마지막 문은 panel 변수가 someOtherFancyPanel을 가리키고 더 이상 프레임의 내용 창에 있지 않게하고 내용 창을 변경하지 않은 채로 둡니다.

관련 문제