2012-07-05 3 views
4

다음과 같이 써야합니다. jframe.getContentPane(). add (button);자바의 JFrame jframe.add (버튼);

는하지만 난 단지

jframe.add (버튼)을 쓸 때 그것은 또한 작동하는 것을 발견;

두 가지 접근 방식의 차이점은 무엇입니까? JFrame.getContentPane()를 작성하는 것이 유리한가? add (button); ?

+0

[Java 문서] (http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html # contentpane) :-) –

답변

3

맛이 좋습니다. 난 항상 getContentPane()를 사용합니다. (..) 추가, 나는 읽기/실제로 그래서 당신은 요소 JButton처럼 JTextAreaContainer 및 추가되어야한다는 것을 알아야한다

+0

+1, 둘 다 똑같은 것을 의미하므로, 두 문장 모두 똑같은 것을 의미하기 때문에 두 문장 모두'Content Pane'의'CENTRE'에'JComponent'를 추가합니다. 'JFrame' :-) –

+0

@HovercraftFullOfEels "후자"와 섞여서 내 게시물을 수정했습니다. Tx! – ControlAltDel

+0

하지만 차이점은 무엇입니까? –

1

에 무슨 일이 일어나고 있는지 쉽게 생각하는 당신의 메서드 :

getContentPane() 

이 프레임에 대해 Container 개체를 반환합니다. 그래서 두 접근법은 똑같지 만 두 번째 접근법을 사용해야합니다. 경우

당신은 많은 요소 첫 번째 방법 큰 응용 프로그램이있을 것이다 경우

읽을 수이고, 두 번째는 일반적으로 권장된다.

Jframe.add() -이 용기의 단부에 지정된 구성 요소를 추가 :

차이는 없다. Container.addImpl의 편리한 메소드 인 입니다.

+0

을 추가합니다. 그러나 jframe.add (button); 및 JFrame.getContentPane(). add (button); –

+0

업데이트 된 답변 확인. – Sajmon

2

이 시도 ........ 자바 1.5의 도착하기 전에

는 jframe.getContentPane(). (버튼) 추가 사용되었다 ..... 그리고 그게 전부가 있었다 그 일을 법적 방법 ....

그러나 이후 자바 1.5에서의 myframe.add (버튼) ... 그 일의 법적 방법으로 하나를 포함 .. 그것의 단지처럼, 클래스 이름을 사용하여 정적 변수에 액세스하는 것은 올바른 방법입니다 ...하지만 여전히 클래스 인스턴스를 사용하여 정적 변수에 액세스 할 수 있습니다 ...

+1

다음은 전체 내용을 자세히 설명하는 [Java Doc] (http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html#contentpane)의 링크입니다. –

+0

감사합니다. 알았어,하지만 난 네가 내 대답에 동의하기를 바란다. 아니면 어떤 식 으로든 편집 할 필요가 있니? ??? –

+0

순수하게, 나는 당신의 대답에 동의한다. 비록 문자열이 여전히 두 용어의 사용법에 붙어 있지만, 그 이유는 나중에 @HovercraftFullOfEels에 의해 설명 된 바와 같이 관련 링크가 나중에 주석으로 제거되었지만 :-) 비록 Java 1.5를 사용한 적이 없기 때문에 어떤 버전이 나왔는지 모르겠다. ( –

1

class javadoc of JFrame

JFrame를 클래스에 오히려 분명한 것은 프레임과 약간 호환되지 않습니다. 다른 모든 JFC/Swing 최상위 컨테이너와 마찬가지로 JFrame은 JRootPane을 유일한 자식으로 포함합니다. 루트 창에서 제공하는 컨텐츠 창에는 일반적으로 JFrame이 표시하는 모든 비 메뉴 컴포넌트가 포함되어야합니다. 이것은 AWT Frame의 경우와 다릅니다. 편리한 추가 및 그 변형으로서, remove 및 setLayout는 필요에 따라서 contentPane에 전송되도록 (듯이) 오버라이드 (override)되고 있습니다.

frame.add(child); 

을 그리고 아이는 contentPane에 추가됩니다 이것은 당신이 쓸 수 있다는 것을 의미합니다.