이번 강좌에서는 전강좌에 이어 스윙에 대해 살펴 보도록 하겠습니다.
컴포넌트와 컨테이너
Container로 부터 파생된 클래스는 다른 Component를 담을수 있으며, 컨테이너라고 부릅니다. 컨테이너는 다른 컨테이너를 포함할수도 있습니다(Window및 그하위 클래스는 예외) JFrame객체는 Application용 메인 윈도우를 나타내며, Window 객체는 그렇지않습니다. 윈도우를 만들기위해서는 항상 JFrame이 필요 합니다. 스윙의 독립 윈도우 컨테이너들은 AWT가 제공해주지 못하는 능력을 제공하기 위해 JFrame에 이미 JRootPane이라는것을 만들어 두었는데 여기에 프로그래머가 만든 컴포넌트는 JRootPane이 관리하고 있는 contantPane이라는것에 넣도록 하고 있습니다.. JFrame, JApplet, JWindow, JDialog등은 JComponent를 상속하지 않으므로 스윙의 능력을 직접 쓸수 없는 대신 JComponent를 상속받은 JRootPane을 미리 넣어 두는것 입니다. 그렇게 함으로서 독립적인 윈도우로 표시되는 컨테이너도 스윙의 기능을 사용할수 있으며 그렇게 하기위해서는 프로그래머가 만든 컴포넌트를 contentPane에 넣는 것 입니다.
JRootPane
- AWT의 경우 Frame에 직접 add를 사용하여 컴포넌트를 추가하였으나 JFrame의 경우엔 getContentPane()을 이용하여 contentPane을 얻은후 거기에 컴포넌트를 추가 합니다.
- JFrame, JApplet, JDialog, JWindow등은 RootPaneContainer 인터페이스를 구현하고 있으며 getXXXPane() 함수등으로 pane(창)을 얻은후 작업을 합니다. 이 인터페이스에는 setXXXPane메소드도 존재 합니다.
- glasspane(투명창) : 기본적으로 보여지지 않게 설정되었으며 보여지게 한다면 어떤 컴포넌트 등의 위에 그림을 그릴 수 있다. 또한 마우스 이벤트등을 가로채 반응을 안하게 할수있습니다.-
- layeredPane(다중창) : contentPane과 JMenuBar(생략가능)등을 담으며 다층레이어로 이루어져 팜업메뉴, ToolTip과 같은 컴포넌트가 contentPane위에 오도록 보장 합니다. 즉 서로다른 레이어를 가지는 컴포넌트를 담을수 있습니다.
- contentPane(내용창) : 루트창의 가시적인컴포넌트들(메뉴창 제외)을 담은 개체
- JMenuBar(메뉴바) : 컨테이너의 메뉴를 담습니다.
- JRootPane 개체는 직계 부속 컴포넌트를 가질 수 없으므로 JRootPane 에 컴포넌트를 직접 부착 할 수 없고 , 그에 따라 다음 표현은 틀린 것이다 . rootPane.add(child); 그 대신 JRootPane 의 contentPane 을 구해 여기에 컴포넌트를 부착 합니다 . rootPane.getContentPane().add(child);
|
댓글 없음:
댓글 쓰기