Download presentation
Presentation is loading. Please wait.
1
9장 AWT(1)
2
AWT(1) AWT AWT 이벤트 처리 배치 관리자(Layout Manager)
3
AWT(1) AWT 자바 GUI 관련 패키지 버튼이나 라디오 버튼 같은 비주얼 컴포넌트와 컴포넌트의 배치, 이벤트 처리, 그래픽과 관련된 클래스 제공 AWT를 사용하면 각 플랫폼에 따라 다른 모양으로 출력되는 것을 볼 수 있는데 이것은 윈도우에 출력하는 부분을 AWT가 직접 담당하는 것이 아니라 플랫폼의 윈도우 모듈이 담당하고 AWT 객체를 플랫폼 윈도우 모듈의 요소와 맵핑 시켜주는 역할만은 담당하기 때문
4
AWT(1) 컴포넌트 추상 클래스인 Component 클래스를 상속하여 구현 비주얼 컴포넌트 컴포넌트 이름 기능 Label
고정 문자열을 표시한다. Button 버튼을 만들 때 사용한다. Checkbox 체크박스와 라디오버튼을 만들 때 사용한다. Choice 드롭-다운 리스트를 만들 때 사용한다. Canvas 빈 공간으로 아무것이나 그려 넣을 수 있다. List 리스트를 만들 때 사용한다. Scrollbar 스크롤바를 만들 때 사용한다. TextField 한 줄의 문자열을 입력받을 때 사용한다. TextArea 여러 줄의 문자열을 입력 받을 때 사용한다.
5
AWT(1) 비주얼 컴포넌트가 기본적으로 제공하는 메서드 사이즈 / 위치 관련 메서드 메서드 이름 기능
Dimension getSize() 컴포넌트의 사이즈를 반환한다. Point getLocation() 컴포넌트의 위치를 반환한다. Rectangle getBounds() 컴포넌트의 위치와 사이즈를 반환한다. void setSize(int width, int height) 컴포넌트의 사이즈를 지정한다. void setLocation(int x, int y) 컴포넌트의 위치를 지정한다. void setBounds(int x, int y, int width, int height) 컴포넌트의 위치와 사이즈를 지정한다.
6
AWT(1) 색상 관련 메서드 폰트 관련 메서드 컴포넌트 동작 관련 메서드 전경색을 지정한다. 배경생을 지정한다. 메서드 이름
기능 void setForeground(Color c) 전경색을 지정한다. void setBackground(Color c) 배경생을 지정한다. 메서드 이름 기능 Font getFont() 컴포넌트의 폰트를 반환한다. void setFont(Font f) 컴포넌트의 폰트를 지정한다. 메서드 이름 기능 void setEnabled(boolean b) 컴포넌트를 활성화 / 비활성화 한다. void setVisible(boolean b) 컴포넌트를 화면서 보이게 / 보이지이 않게 한다.
7
AWT(1) 컨테이너 자신의 영역 안에 다른 컴포넌트를 포함할 수 있는 컴포넌트
Window, Frame, Panel, Applet, Dialog Frame 컨테이너 대부분의 애플리케이션에서 사용. Window의 하위 클래스로 윈도우 테두리, 메뉴바와 타이틀 등을 지원 Frame 클래스는 생성 후 화면이 바로 나타나지 않고, 기본 크기도 정해져 있지 않기 때문에 setSize()나 setBounds() 메서드를 호출해 크기를 지정해 주어야 하며, setVisible()메서드를 호출해 화면에 보이도록 해야 함 Panel 컨테이너 Panel 클래스는 컴포넌트를 그룹별로 모을 때 주로 사용. 이렇게 컴포넌트를 Panel에 모으면 관리가 용이하고 배치가 용이해짐 Applet 컨테이너 자바 애플릿의 가장 바깥쪽의 컨테이너 Dialog 컨테이너 메시지를 출력하거나 사용자로부터 입력을 받을 때 주로 사용되는 컨테이너
8
AWT(1) 예제 import java.awt.*; // AWT 컴포넌트를 사용하기위해 java.awt 패키지를 import 한다. public class AWTExam { public static void main(String args[]) { // Panel 클래스 객체와 컴포넌트를 배치하기위한 Frame 클래스 객체를 생성한다. Frame frm = new Frame(); // Frame 클래스의 setTitle() 메서드를 호출해 프레임의 타이틀바에 문자열을 출력한다. frm.setTitle("프레임 테스트"); // Frame 클래스의 클래스의 setSize() 메서드를 호출해 프레임의 크기를 설정한다. frm.setSize(400,200); // Frame 클래스의 setResizable() 메서드를 호출해 프레임의 크기를 변경할 수 없게 한다. frm.setResizable(false); // 컴포넌트를 배치하기위한 Panel 클래스 객체들을 생성한다. Panel pane01 = new Panel(); Panel pane02 = new Panel(); Panel pane03 = new Panel(); Panel pane04 = new Panel(); Panel pane05 = new Panel(); //Panel의 위치를 확인하기위해 Panel 클래스 객체의 setBackground() 메서드를 호출해 배경색을 설정한다. pane01.setBackground(Color.RED); pane02.setBackground(Color.BLUE); pane03.setBackground(Color.GREEN); pane04.setBackground(Color.ORANGE); pane05.setBackground(Color.GRAY);
9
AWT(1) Label label = new Label("문자열 :"); // Label 클래스 객체를 생성한다.
TextField textField = new TextField(20); // 문자열을 입력받기위한 TextField 클래스 객체를 생성한다. // Label 클래스 객체와 TextField 클래스 객체를 Panel 클래스 객체인 // pane01에 add() 메서드를 호출해 추가한다. pane01.add(label); pane01.add(textField); // Label 클래스 객체와 TextField 클래스 객체가 추가된 Panel 클래스 객체를 // Frame 클래스의 add() 메서드를 호출하여 프레임에 추가한다. frm.add(pane01, "North"); // "체크박스 1번"을 레이블로 가지는 Checkbox 클래스 객체를 생성한다. Checkbox chk01 = new Checkbox("체크박스 1번"); pane02.add(chk01); frm.add(pane02,"West"); // 리스트 컴포넌트인 List 클래스 객체를 생성한다. List list = new List(3); // List 클래스 객체의 add() 메서드를 호출하여 리스트 목록을 추가한다. list.add("리스트1"); list.add("리스트2"); pane03.add(list); frm.add(pane03,"East");
10
AWT(1) 실행결과 // Button 클래스 객체를 생성한다 Button button01 = new Button("확인");
pane04.add(button01); pane04.add(button02); frm.add(pane04, "South"); // 여러 줄의 텍스트를 입력할 수 있는 TextArea 클래스 객체를 생성한다. TextArea textArea = new TextArea(5,10); pane05.add(textArea); frm.add(pane05, "Center"); // Frame 클래스의 setVisible() 메서드를 호출하여 프레임과 프레임에 포함된 컴포넌트를 화면에 출력한다. frm.setVisible(true); } } 실행결과
11
AWT(1) AWT 이벤트의 종류 컴포넌트의 종류에 따라 다른 AWT의 이벤트를 발생
상위 이벤트 클래스와 하위 이벤트 클래스로 구분할 수 있는데 상위 이벤트 클래스는 같은 이벤트도 각 컴포넌트에서 다른 의미를 가질 수 있음 벤이벤트 클래스 설 설 명 상위 클래스 ActionEvent 컴포넌트가 활생화될 때 발생 AdjustmentEvent 스크롤 바와 같이 조정 가능한 컴포넌트에서 발생 ItemEvent 리스트 컴포넌트와 같이 선택항목이 존재하는 컴포넌트에서 발생 TextEvent 텍스트 컴포넌트에서 발생 하위 ComponentEvent 컴포넌트의 모양이나 크기가 변활 될 때 발생 ContainerEvent 컨테이너에 컴포넌트가 추가 / 삭제될 때 발생 FocusEvent 컴포넌트에 포커스가 들어왔을 때 발생 KeyEvent 키보드로부터 입력이 있을 때 발생 MouseEvent 마우스의 움직임에 의해 발생 MouseWheelEvent 마우스 휠의 움직임에 의해 발생 PaintEvent 컴포넌트가 그려져야 할 때 발생 WindowEvent 윈도우가 활성화 또는 닫힐 때 발생
12
이벤트 리스너의 종류 이벤트 클래스 리스너 인터페이스 설 명 ActionEvent ActionListener
actionPerformed(ActionEvent) AdjustmentEvent AdjustmentListener adjustmentValueChanged(AdjustmentEvent) ItemEvent ItemListener itemStateChanged(ItemEvent) TextListener TextValueChanged(TextEvent) ComponentEvent ComponentListener componentHidden(ComponentEvent) componentShown(ComponentEvent) componentMoved(ComponentEvent) componentResized(ComponentEvent) ContainerEvent ContainerListener componentAdded(ContainerEvent) componentRemoved(ContainerEvent) FocusEvent FocusListener focusGained(FocusEvent) focusLost(FocusEvent) KeyEvent KeyListener keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent) WindowEvent WindowListener windowOpned(WindowEvent) windowClosing(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowStateChanged(WindowEvent) windowGainedFocus(WindowEvent) windowLostFocus(WindowEvent) MouseEvent MouseListener mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent)
13
AWT(1) 예제 import java.awt.*;
import java.awt.event.*; class MyActionListener implements ActionListener { private TextField text = null; public MyActionListener(TextField text) { this.text = text; } public void actionPerformed(ActionEvent e) { // ActionEvent 클래스의 getActionCommand()를 호출하여 // 액션 이벤트가 발생한 컴포넌트의 이름을 구한다. String cmd = e.getActionCommand(); . text.setText(cmd + "버튼이 클릭되었습니다."); } public class EventListenerExam { public static void main(String args[]) { Frame frm = new Frame(); frm.setTitle(“이벤트 처리 예제"); frm.setSize(300,100);
14
AWT(1) Panel pane01 = new Panel(); Panel pane02 = new Panel();
TextField text = new TextField(30); text.setEditable(false); pane01.add(text); Button button01 = new Button(“확-인 "); Button button02 = new Button("재-확-인 "); pane02.add(button01); pane02.add(button02); frm.add(pane01, "Center"); frm.add(pane02, "South"); ActionListener listener = new MyActionListener(text); // 버튼의 액션 이벤트를 감지하여 도작하도록 Button 클래스의 // addActionListener() 메서드를 호출하여 컴포넌트에 이벤트 리스너를 등록한다 button01.addActionListener(listener); button02.addActionListener(listener); frm.setVisible(true); } } AWT(1)
15
(예제) Swing API를 이용한 이미지 아이콘 추가하기
import javax.swing.*; ImageIcon korea1 = new ImageIcon("0.jpg"); JButton korea = new JButton("이미지", korea1); korea.addActionListener(listener);
16
AWT(1) 배치 관리자(Layout Manager)
자바는 기존 언어와 다르게 컴포넌트를 배치 관리자라는 것을 이용해 컴포넌트를 배치 절대 좌표로 보기 좋게 배치를 한다 해도 실제 화면에 출력을 해당 플랫폼의 윈도우 시스템이 하여 각 컴포넌트의 모양이나 크기가 달라지기 때문에 모양이 엉망이 되기 때문 컨테이너는 배치와 관련된 모든 작업을 배치 관리자에게 대행시키고 배치 관리자는 하위 윈도우 시스템에 가장 적합한 값으로 매핑시켜 화면에 보여주게 됨 BorderLayout, BoxLayout, CardLayout, DefaultMenuLayout, FlowLayout, GridBagLayout, GridLayout, OverlayLayout, ScrollPaneLayout, SpringLayout, ViewportLayout 등 다수 BorderLayout, BoxLayout, CardLayout, DefaultMenuLayout, FlowLayout, GridBagLayout, GridLayout, OverlayLayout, ScrollPaneLayout, SpringLayout, ViewportLayout
17
AWT(1) 배치 관리자의 종류 FlowLayout 배치 관리자 사용법
컴포넌트를 왼쪽에서 오른쪽, 위에서 아래쪽으로 순차적으로 배열하며 만약 한 줄에 모두 배치하지 못하면 다음 줄에 연속하여 배열 FlowLayout 배치 관리자는 컴포넌트의 지정한 크기를 무시하고, 각 컴포넌트에 필요한 최소 높이, 위치와 간격이 자동적으로 지정되어 배치 배치 관리자 사용법 배치 관리자 생성 컨테이너의 setLayout() 메서드로 컨테이너에 배치관리자를 설정 컴포넌트를 추가
18
AWT(1) import java.awt.*; public class FlowLayoutExam {
public static void main(String args[]) { Frame frm = new Frame("FlowLayout 예제"); frm.setSize(200,100); frm.setLayout(new FlowLayout()); frm.add(new Button("버튼 1번")); frm.add(new Button("버튼 2번")); frm.add(new Button("버튼 3번")); frm.setVisible(true); } }
19
AWT(1) BorderLayout BorderLayout은 다음 그림과 같이 5개의 영역으로 구분해 컴포넌트를 배치
각 영역은 North, South, West, Center, East로 구분되면 add(Componet, String) 메서드로 컴포넌트를 추가
20
AWT(1) 예제 import java.awt.*; public class BorderLayoutExam {
public static void main(String args[]) { Frame frm = new Frame("BorderLayout 예제"); frm.setSize(300,200); // 컨테이너인 BorderLayout 클래스 객체를 인자로 Frame 클래스의 // setLayout() 메서드를 호출하여 프레임의 배치관리자를 BorderLayout로 설정한다. frm.setLayout(new BorderLayout()); frm.add(new Button("버튼 1번"), "North"); // 버튼 2번을 프레임의 좌측에 배치한다. 컴포넌트의 위치를 지정하는 문자열은 // BorderLayout 클래스의 정적 멤버 변수를 사용해서 지정할 수도 있다. frm.add(new Button("버튼 2번"), BorderLayout.WEST); frm.add(new Button("버튼 3번"), "East"); frm.add(new Button("버튼 4번"), "South"); frm.add(new Button("버튼 5번"), "Center"); frm.setVisible(true); } }
21
AWT(1) GridLayout 배치관리자 객체를 생성할 때 가로세로 셀의 크기를 지정하여 바둑판과 같이 일정한 크기로 컴포넌트를 배치 각 셀의 크기가 모두 동일하기 때문에 배치되는 컴포넌트의 크기는 무시되며, 좌측에서 우측으로 위에서 아래의 순서로 컴포넌트를 배치 import java.awt.*; public class GridLayoutExam { public static void main(String args[]) { Frame frm = new Frame("GridLayout 예제"); frm.setSize(300,200); // 가로 2칸, 세로 3칸의 GridLayout 클래스 객체를 생성해 배치관리자를 설정한다. frm.setLayout(new GridLayout(3,2)); frm.add(new Button("버튼 1번")); frm.add(new Button("버튼 2번")); frm.add(new Button("버튼 3번")); frm.add(new Button("버튼 4번")); frm.add(new Button("버튼 5번")); frm.setVisible(true); } }
Similar presentations