Frame 클래스
Frame 클래스
Frame은 제목과 테두리가 있는 최상위 창이에요. 프레임의 크기에는 테두리용으로 지정된 영역이 포함돼요. 테두리 영역의 크기는 getInsets 메서드로 얻을 수 있는데, 이 크기는 플랫폼에 따라 달라서 pack이나 show를 호출해 프레임을 표시 가능하게 만든 뒤에야 유효한 insets 값을 얻을 수 있어요.
본문
테두리 영역이 프레임 전체 크기에 포함되므로, 테두리는 프레임의 일부를 가려서 하위 컴포넌트를 렌더링·표시할 수 있는 영역을 제한해요. 사용 가능한 영역은 왼쪽 위 모서리가 (insets.left, insets.top)이고 크기가 width - (insets.left + insets.right) × height - (insets.top + insets.bottom)인 사각형이에요.
public class Frame
extends Window
implements MenuContainer
프레임의 기본 레이아웃은 BorderLayout이에요.
무장식 프레임
프레임은 setUndecorated로 기본 장식(즉 Frame과 Titlebar)을 끌 수 있어요. 이것은 프레임이 표시 가능하지 않을 때만 할 수 있어요.
다중 화면 환경
다중 화면 환경에서는 Frame(GraphicsConfiguration) 또는 Frame(String title, GraphicsConfiguration) 생성자로 다른 화면 장치에 Frame을 만들 수 있어요. GraphicsConfiguration 객체는 대상 화면 장치의 GraphicsConfiguration 객체 중 하나예요.
가상 장치 다중 화면 환경에서 데스크톱 영역이 여러 물리 화면 장치에 걸쳐 있다면, 모든 구성의 bounds는 가상 좌표계에 상대적이에요. 가상 좌표계의 원점은 기본 물리 화면의 왼쪽 위 모서리에 있어요. setLocation을 호출할 때는 가상 좌표를 넘겨야 해요. 마찬가지로 getLocationOnScreen은 가상 장치 좌표를 반환해요. GraphicsConfiguration의 getBounds를 호출해 가상 좌표계에서의 원점을 찾을 수 있어요.
Frame f = new Frame(GraphicsConfiguration gc);
Rectangle bounds = gc.getBounds();
f.setLocation(10 + bounds.x, 10 + bounds.y);
위 코드는 해당 GraphicsConfiguration의 물리 화면 원점에 상대적으로 (10, 10)에 프레임을 배치해요. GraphicsConfiguration의 bounds를 고려하지 않으면 프레임이 가상 좌표계에 상대적인 (10, 10)에 배치되어 기본 물리 화면에 나타나게 돼요.
발생하는 WindowEvent
Frame은 다음 WindowEvent를 생성할 수 있어요.
WINDOW_OPENEDWINDOW_CLOSING— 프로그램이 이 이벤트를 처리하면서 창을 명시적으로 숨기거나 dispose하지 않으면 창 닫기 동작이 취소돼요.WINDOW_CLOSEDWINDOW_ICONIFIED/WINDOW_DEICONIFIEDWINDOW_ACTIVATED/WINDOW_DEACTIVATEDWINDOW_GAINED_FOCUS/WINDOW_LOST_FOCUSWINDOW_STATE_CHANGED
주요 메서드
setTitle(String)/getTitle()— 제목을 설정·조회해요.setResizable(boolean)— 크기 조절 여부를 설정해요.setState(int)/setExtendedState(int)— 프레임 상태를 설정해요.NORMAL,ICONIFIED,MAXIMIZED_BOTH같은 상수를 사용해요.setMenuBar(MenuBar)— 메뉴 바를 설정해요.pack()— 하위 컴포넌트의 선호 크기에 맞게 프레임 크기를 조정해요.