Chap12 그래피컬 사용자 인터페이스(GUI) 12.1 Swing과 AWT 12.2 AWT 패키지와 주요 클래스 12.3 프레임(Frame) 12.4 배치 관리자(Layout Management) 12.5 판넬(Panel) 12.6 판넬에서의 그래픽 사용 12.7 색의 사용 12.8 글꼴의 사용
12.1 Swing과 AWT AWT 프로그램이 실제 실행되는 컴퓨터(운영체제)에서 제공되는 그래픽 컴포넌트(native peer)를 이용하여 그래픽을 나타낸다 중량(heavyweight) 컴포넌트 실행되는 시스템에 따라 다른 모양을 나타낸다 SWING 실행되는 시스템과 무관하게 대부분의 그래픽을 자바 시스템(JVM)이 처리하여 나타낸다 경량(lightweight) 컴포넌트 시스템에 상관없이 일관된 모양을 나타낸다 AWT에 비해 실행시간과 메모리가 많이 요구된다
12.1 Swing과 AWT AWT 패키지와 SWING 패키지 Applet Object Dimension Font FontMetrics Color Graphics Component Container LayoutManager Panel Window JApplet Frame Dialog JFrame JDialog JComponent 다양한 스윙 컴포넌트 AWT 패키지 SWING 패키지
12.1 Swing과 AWT SWING을 이용한 GUI 구축의 예
12.2 AWT 패키지와 주요 클래스 12.2.1 java.awt 패키지 GUI 구축을 위한 클래스들의 모임 유형구분 클래스명 컴포넌트의 배치와 관련된 클래스 BorderLayout, FlowLayout, GridLayout, GridBagLayout, GridBagConstraints, CardLayout GUI 구성과 관련된 클래스 Button, Label, Canvas, Checkbox, Choice, Scrollbar, ComponentList, Menu, TextComponent, TextArea, MenuBar, MenuItem, TextField, CheckboxGroup, CheckboxMenuItem, MenuComponent 그래픽 출력과 관련된 클래스 Color, Font, FontMetrics, Rectangle, Point, Polygon, Graphics, Image 컨테이너 클래스 Frame, Panel, Window, Container, FileDialog, Dialog 그 외의 클래스 Insets, Dimension, Toolkit, Event, MediaTracker
12.2 AWT 패키지와 주요 클래스 12.2.2 Component 클래스 GUI 구축에 필요로 되는 많은 하위 클래스들을 가지고 있다. 약 100여개의 메소드 제공 Component 클래스의 주요 메소드 메소드 이름 설명 Image createImage(int width, int height) width, height 크기의 Image 객체를 생성하여 반환 Font getFont() 현재 설정된 폰트를 폰트 객체로 반환 FontMetrics getFontMetrics(Font font) font 폰트에 관한 FontMetrics 객체를 반환 Color getForeground() 전경색(foreground)을 Color 객체로 반환 Dimension getSize() 현재 컴포넌트의 크기를 Dimension 객체로 반환 void paint(Graphics g) 현재의 컴포넌트에 Graphics 객체 g를 이용하여 그림을 그리는 메소드 void repaint() JVM에게 update() 메소드 호출을 요청한다 void setBackground(Color c) 배경색을 c로 설정 void setFont(Font f) 폰트를 f로 설정 void setForeground(Color c) 전경색을 c로 설정 public void update(Graphics g) 컴포넌트를 배경색으로 채우고 paint() 메소드를 호출한다
12.2 AWT 패키지와 주요 클래스 12.2.3 Container 클래스 컴포넌트를 담는 그릇 역할을 하는 클래스 JFrame, JPanel, Japplet, Applet 등의 하위 클래스를 가지고 있다 컨테이너는 서브(sub) 컨테이너를 가질 수 있다 일반적으로 서브 컨테이너로 JPanel 클래스가 많이 사용된다 컨테이너를 이용한 GUI 구성의 예(AWT 컴포넌트 사용)
12.2 AWT 패키지와 주요 클래스 Container 클래스의 주요 메소드 메소드 이름 메소드 설명 Component add(Component c) 컴포넌트 c를 현재의 컨테이너에 추가하고 c를 반환 Component add(String name, Component c) 컴포넌트 c를 컨테이너에 추가. name은 컴포넌트가 놓일 방향을 지시하는 문자열 객체 void remove(Component c) 컴포넌트 c를 현재의 컨테이너에서 제거 void setLayout(LayoutManager lm) lm으로 지정된 배치관리자를 현재 컨테이너의 배치관리자로 설정 void addContainerListener(ContainerListener cl) 이벤트를 받아들이기 위한 이벤트 리스너를 등록 void removeContainerListener(ContainerListener cl) 이벤트 리스너의 등록을 해제
12.3 프레임(Frame) GUI를 구축을 위한 프레임 클래스 : JFrame 클래스 JFrame 클래스의 메소드 생성자 public JFrame() public JFrame(String title) title은 프레임의 제목을 의미 JFrame 클래스의 메소드 메소드 이름 메소드 설명 public Container getContentPane() 프레임에 대한 contentPane 객체를 반환
12.3 프레임(Frame) 예제 : FrameTest1.java 예제 : FrameTest2.java
12.4 배치 관리자(Layout Manager) 자바는 컨터이너에 컴포넌트를 배치할 수 있는 다양한 방법을 배치관리자 클래스로 제공 FlowLayout, BorderLayout, GridLayout 등 다양한 배치관리자 클래스 제공 Container 클래스의 setLayout() 메소드를 사용하여 배치관리자를 설정
12.4 배치 관리자(Layout Manager) 12.4.1 FlowLayout 배치 관리자 배치관리자를 지정하지 않으면 묵시적으로 FlowLayout으로 지정된다 컴포넌트를 수평 방향으로 배치하는 관리자 생성자 FlowLayout() FlowLayout(int align) FlowLayout(int align, int hgap, int vgap) align : 정렬방식을 지정하는 상수. LEFT, CENTER, RIGHT를 사용 hgap, vgap : 컴포넌트 사이의 수직, 수평 간격을 지정하는 값으로서 픽셀단위
12.4 배치 관리자(Layout Manager) 예제 : FlowLayoutDemo.java
12.4 배치 관리자(Layout Manager) 12.4.2 BorderLayout 배치 관리자 컴포넌트를 추가할 때 방향을 지정하여 추가할 수 있는 기능을 제공. 지정할 수 있는 방향은 East, West, South, North, Center 생성자 BorderLayout() BorderLayout(int hgap, int vgap) hgap, vgap : 컴포넌트들 사이의 간격을 의미하며 픽셀단위로 지정 컴포넌트를 추가하는 add() 메소드에 방향을 지정 void add(String name, Component comp)
12.4 배치 관리자(Layout Manager) 예제 : BorderLayoutDemo.java
12.4 배치 관리자(Layout Manager) 12.4.3 GridLayout 배치 관리자 컴포넌트를 행과 열을 가진 배열 형태로 배치 생성자 GridLayout() GridLayout(int rows, int cols) GridLayout(int rows, int cols, int hgap, int vgap) rows, cols : 배치할 행과 열 hgap, vgap : 컴포넌트 사이의 간격. 픽셀 단위
12.4 배치 관리자(Layout Manager) 예제 : GridLayoutDemo.java
12.5 판넬(Panel) 그릇(container) 역할을 하는 클래스 : JPanel 클래스 생성자 JPanel() 예제 : JPanelDemo.java
12.6 판넬에서의 그래픽 사용 판넬(JPanel 객체)의 역할 다양한 컴포넌트를 배치하는 그릇역할 다양한 그래픽을 나타낼 수 있는 기능도 제공 판넬에 그래픽을 나타내기 위한 프로그램이 작성순서 ① 클래스가 JPanel 클래스로부터 상속 ② 상위 클래스인 JComponent 클래스에서 선언된 paintComponent(Graphics g) 메소드를 반드시 오바라이딩 하여야 한다. ③ paintComponent(Graphics g) 메소드 내에 그래픽 기능을 기술한다(매개 변수로 받은Graphics 객체의 메소드를 이용하여 기술)
12.6 판넬에서의 그래픽 사용 paintComponent() 메소드 : 상위 클래스인 JComponent 클래스에 선언 protected void paintComponent(Graphics g) 이 메소드는 JVM에 의해 자동으로 실행되는 메소드이다. 즉 판넬 객체가 나타날 때 마다 JVM은 이 메소드를 자동으로 호출한다. JVM은 이 메소드를 호출할 때, 해당 판넬에 그래픽을 나타낼 수 있는 Graphics 객체를 매개변수로하여 호출한다. 판넬 클래스를 이용하여 그래픽을 나타내는 전형적인 예 ......................... class DrawTest extends JPanel { // JPanel 클래스로부터 상속 protected void paintComponent(Graphics g) { // 메소드 오버라이딩 super.paintComponent(g); // 상위클래스의 paintComponent() 메소드 호출 g.drawString(.........); // 다양한 그래픽 기능 사용 g.drawLine(..........); g.drawRect(...........); } }
12.6 판넬에서의 그래픽 사용 Graphics 클래스의 주요 메소드 메소드 이름 설명 void drawArc(int x, int y, int w, int h, int startAngle, int endAngle) startAngle과 endAngle로 지정된 각도를 가지는 원호를 그린다 void drawImage(Image img, int x, int y, imageObserver io) img로 지정된 이미지를 애플릿의 x,y좌표에 그린다 viod drawLine(int x0, int y0, int x1, int y1) x0,y0부터 x1,y1까지 라인을 그린다 void drawOval(int x, int y, int w, int h) x,y좌표에 w,h의 폭과 높이를 가진 타원을 그린다 void drawPolygon(int x[], int y[], int n) x[]와 y[] 배열의 각 점을 좌표로 하여 n개의 코너점을 가진 다각형을 그린다 void drawRect(int x, int y, int w, int h) x,y 좌표에 w,h의 폭과 높이를 가진 사각형을 그린다 void drawString(String str, int x, int y) 문자열을 x,y 좌표에 그린다
12.6 판넬에서의 그래픽 사용 Graphics 클래스의 주요 메소드-계속 메소드 이름 설명 void fillArc(int x, int y, int w, int h, int startAngle, int endAngle) 속이 찬 원호를 그린다 void fillOval(int x[], int y[], int n) 속이 찬 타원을 그린다 void fillPolygon(int x[], int y[], int n) 속이 찬 다각형을 그린다 void fillRect(int x, int y, int w, int h) 속이 찬 사각형을 그린다 Color getColor() 현재 객체의 색을 Color 객체로 반환 Font getFont() 현재 객체의 폰트를 Font 객체로 반환 FontMetrics getFontMetrics() 현재 객체의 폰트 정보를 FontMetrics 객체로 반환 void setColor(Color color) 현재 객체의 색을 color로 설정
12.6 판넬에서의 그래픽 사용 예제 : GraphicsLine.java 예제 : GraphicsRectangles.java
12.6 판넬에서의 그래픽 사용 예제 : GraphicsCircle.java
12.6 판넬에서의 그래픽 사용 Dimension 클래스 d : Dimension 객체 w,h : 애플릿의 폭과 높이 애플릿의 폭과 높이를 제공하는 클래스 생성자 Dimension(Dimension d) Dimension(int w, int h) d : Dimension 객체 w,h : 애플릿의 폭과 높이
12.6 판넬에서의 그래픽 사용 예제 : DynamicRectangle.java
12.7 색의 사용 자바는 색에 관한 기능을 가지는 java.awt.Color 클래스를 제공 그래픽 객체에 색을 설정하기 위해서는 Color 객체를 생성한 다음 setColor() 메소드를 사용하여 설정 색을 설정하는 예 .... public void paint(Graphics g) { ... Color c = Color.orange; g.setColor(c); g.fillRect(100, 10, 60, 50); }
12.7 색의 사용 Color 클래스의 생성자 Color(int red, int green, int blue) Color(float r, float g, float b) Color(int rgb) Color 클래스의 상수 black (0, 0, 0) blue (0, 0, 255) cyan (0, 255, 255) darkGray (64, 64, 64) gray (128, 128, 128) green (0, 255, 0) lightGray (192, 192, 192) magenta (255, 0, 255) orange (255, 200, 0) pink (255, 175, 175) red (255, 0, 0) white (255, 255, 255) yellow (255, 255, 0)
12.7 색의 사용 Color 클래스의 주요 메소드 메소드 이름 설명 Color brighter() Color darker() 현재 객체의 색보다 한 단계 어두운 색의 Color 객체를 반환 static Color decode(String str) throws NumberFormatException 문자열 str과 동일한 Color 객체를 반환 booleanequals(Object obj) 현재의 객체와 obj로 지정된 객체가 같은 색을 가지면 true, 아니면 false를 반환 int getRed() 현재 객체의 R(red)값을 반환 int getGreen() 현재 객체의 G(green)값을 반환 int getBlue() 현재 객체의 B(blue)값을 반환 int getRGB() 현재 객체의 RGB값을 반환
12.7 색의 사용 예제 : ColorFont.java 예제 : ColorExam.java
12.8 글꼴(Font)의 사용 애플릿에 대한 텍스트 출력을 객체로 취급 애플릿에 텍스트를 출력하기 위해서는 Graphics 클래스의 drawString() 메소드 사용 출력되는 그래픽(텍스트)에 폰트를 지정하기 위해서는 Font 객체를 생성한 다음 setFont() 메소드를 사용하여 설정 사용 예 ...... public void paint(Graphics g) { ..... Font font = new Font("Serif", Font.ITALIC, 36); g.setFont(font); g.drawString("JAVA APPLET", 100, 50); .... }
12.8 글꼴(Font)의 사용 폰트 관련 클래스 Font 클래스 : 다양한 글꼴에 관한 정보 제공 FontMetrics : 글꼴의 크기에 관한 정보 제공 Font 클래스 생성자 Font(String name, int style, int fontsize) name : 글꼴의 이름으로서 Serif, SansSerif, Monospaced가 많이 사용 style : 상수로서 BOLD, ITALIC, PlAIN이 사용 fontsize : 글꼴의 크기 FontMetrics 클래스 생성자 FontMetrics(Font font) font : 정보를 얻고자 하는 글꼴의 이름
12.8 글꼴(Font)의 사용 Font 클래스의 주요 메소드 FontMetrics 클래스의 주요 메소드 메소드 이름 설명 String getName() 글꼴의 이름을 반환 int getSize() 글꼴의 크기를 반환 int getStyle() 글꼴의 스타일을 반환 메소드 이름 설명 int charWidth(char c) 문자 c의 폭을 반환 int charWidth(int i) i 값을 문자로 변환한 다음 문자의 폭을 반환 int getAscent() acent를 반환 int getDescent() descent를 반환 int getHeight() height를 반환 int getLeading() leading을 반환 int stringWidth(String str) 문자열 str의 폭을 반환
App 12.8 글꼴(Font)의 사용 getAscent() getDescent() getHeight() FontMetrics가 제공하는 글꼴 크기에 관한 정보 App 머리선 기준선 꼬리선 텍스트 다음줄 getAscent() getDescent() getHeight() getLeading()
12.8 글꼴(Font)의 사용 예제 : SetFont.java 예제 : FontExample.java