본문 바로가기

프로그래밍 일반/JAVA

[JAVA] GUI - Jframe API문서 읽기

JAVA에서 Jframe관련 문서중 핵심부분을 요약, 읽어가며 어떤 기능이 있는지 알아보겠습니다.

관련 문서 위치 (https://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation(int))

 

 

 

요약 : JFrame은 add,remove,setLayout을 제외하고 JFrame.getcontentPane()을 통해 메소드 구현이 가능하다. 그리고, 윈도우 창이 꺼졌을 때도 프로그램이 진행될 수 있게 했다.

 

간단 해설

JFrame은 java.awt.Frame을 상속받고 몇 가지 기능을 더 추가했습니다.

대표적으로 JFrame은 JRootPane창을 유일한 자식으로 갖고 있습니다. 그렇기 때문에 ContentPane부분을 통해서 Content를 추가할 수 있습니다. JFrame.getContentPane()을 기본으로 한 뒤에 Component를 추가하거나 삭제해야 합니다.

하지만, 편의상 add, remove, setLayout부분은 굳이 JFrame.getcontentPane().add(component)를 하지 않고, JFrame.add(component)를 할 수 있게 했습니다. 그리고 contentPane은 언제나 non-null로 만들었습니다.

두번째로, JFrame은 유저가 윈도우창을 닫았을 때 어떻게 행동할 것인지에 관해 설정할 수 있게 했습니다. 해당 메소드는 setDefaultClose Operation(int)로 구현이 되었있고, 창이 닫게 되더라도 유지할 수 있게 했습니다.

 

 

원문번역본

Jframe은 java.awt.Frame의 확장버전이라고 할 수 있습니다.

JFrame 클래스는 Frame과 다른데, JFrame은 JRootPane을 자식으로 갖고 있습니다. 

=> JFrame은 Frame과 달리 JRootPane의 기능을 이용할 수 있다.

 

ontent Pane(Pane은 창, 유리라는 뜻으로 GUI를 실행했을 때 실행되는 창을 의미한다)은 메뉴와 관련된 부분을 담당합니다.

=> JFrame은 JFrame.getContentPane()을 통해 Component(버튼같은 구성물)을 추가할 수 있는 반면, Frame은 직접 추가한다.

 

편의상 add, remove, setLayout은 오버라이드했다.

=> JFrame.getContentPane().add())를 하지 않아도 된다는 의미이다.

frame.add(child);

와 같이 작성하면 child가 contentPane 내용창에 추가된다. contentPane은 언제나 non-null이다. null로 설정하면 예외가 바랫한다.

 

JFrame은 유저가 윈도우창을 닫았을 때 어떻게 행동할 것인지에 관해 명시했다.

해당 메소드는 setDefaultClose Operation(int)로 구현이 되었다. Frame과 같이 하려면 setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)로 구현하면 된다.

 

 

ㅁ 추가로 jframe.setLayout()메소드의 매개변수로 LayoutManager를 설정할 수 있다. 여기서 LayoutManger은 인터페이스로, jframe.setLayout(new GridLayout(3,3));등을 통해 그리드모양으로 설정할 수 있다.

LayoutManager A = new GridLayout(3,3));

jframe.setLayout(A);를 간단하게 쓴 것이다.

 

ㅁ JFrame이 어떻게 구성되어있나?

https://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html

JFrame을 기본으로 HierArchy형식으로 추가된다.

Jframe은밑에 ContentPane(내용을 표현하는 창)과 Menu Bar로 구성되어 있다.

GUI의 component는 이 위계질서안에 추가된다. jframe.add(component)를 한다는 것이 위계질서 안으로 들어간다는 것이다. 이 GUI component는 하나의 컨테이너 안에서만 포함될 수 있고, 만약 컨테이너 안에 이미 포함되어 있다면, 다른 컨테이너로 옮기게 된다.