2011-09-26 1 views

답변

3

Javadocs에서 알 수 있듯이 JFrame.add는 후자를 호출합니다. AWT의 프레임과 Swings JFrame의 비 호환성을 해결하는 편리한 방법입니다. javadocs for JFrame에서

:

JFrame 클래스는 Frame와 다소 호환되지 않습니다. 다른 모든 JFC/Swing 최상위 컨테이너와 마찬가지로 JFrame에는 자식으로 JRootPane이 포함되어 있습니다. 루트 창에서 제공하는 콘텐츠 창은 규칙으로 JFrame에 표시된 모든 비 메뉴 구성 요소를 포함해야합니다. 이것은 AWT Frame의 경우와 다릅니다. 편의를 위해 변형을 추가하고 remove 및 setLayout이 필요하면 contentPane을 으로 전달하도록 재정의되었습니다.

`frame.add(child);` 

을 그리고 아이는 contentPane에 추가됩니다 이것은 당신이 쓸 수 있다는 것을 의미합니다. 내용 창은 항상 null이 아닙니다. 을 null로 설정하면 JFrame이 예외를 throw합니다. 기본 콘텐츠 창 에는 BorderLayout 관리자가 설정되어 있습니다. JFrame의 LayoutManager 추가, 제거 및 설정에 대한 자세한 내용은 to RootPaneContainer를 참조하십시오.

3

add()이있는 JFrame 상태의 JavaDoc을 다음 addImpl()에 작업을 전달합니다 : 기본적으로

, 어린이의 contentPane 대신 프레임에 추가됩니다.

따라서 두 방법 모두 getContentPane().add(...)을 사용하는 것이 더 명백한 사실 외에도 동일한 기본 동작을 갖습니다.

덧셈에 대한 기본 동작 (setRootPaneCheckingEnabled(false) 사용)을 변경할 수는 있지만 유의하고 싶지는 않습니다.

13

두 호출이 동일합니다. Java 5에서 그들은 내용 창으로 호출을 전달하도록 jframe.add을 변경했습니다. Java 5 release notes에서

:.

마지막으로는 7 년 후, 우리는 jFrame.getContentPane()에 jFrame.add 상당했습니다 추가().

또한 javadocs을 참조하십시오.

+0

간단하고 명확합니다. 이것은 올바른 대답이어야합니다. – GusDeCooL

4

질문이있는 경우에만 약 JFrame#add(JComponent) v.s. JFrame.getContentPane()#add(JComponent) 다음 차이점은 없지만 f.e.를 변경하려는 경우. BackGround는 JFrame#setBackground(Color)에서 메서드를 호출하거나 awt.Frame에서 중첩되거나 상속 된 메서드를 호출하면 달라집니다. JFrame.getContentPane()#setBackground(Color) ...

관련 문제