Presentation is loading. Please wait.

Presentation is loading. Please wait.

프로그래머를 위한 Java 2 제4장 AWT 프로그래밍

Similar presentations


Presentation on theme: "프로그래머를 위한 Java 2 제4장 AWT 프로그래밍"— Presentation transcript:

1 프로그래머를 위한 Java 2 제4장 AWT 프로그래밍

2 4.1 AWT 각 컴포넌트 알아보기 AWT(Abstract Window Toolkit) 자바에서 GUI를 작성
네이티브(native) 윈도우를 바탕으로 윈도우98/2000/XT에서는 윈도우즈의 윈도우를 사용 유닉스에서는 X 윈도우를 사용 실행되는 환경에 따라 모양이 약간씩 다를 수 있음 전체적인 형태는 동일 자바 AWT는 java.awt 패키지에 클래스들이 포함

3 4.1 AWT 각 컴포넌트 알아보기 AWT의 컴포넌트 AWT 컴포넌트 클래스들의 상속 관계 메뉴 컴포넌트 상속 관계

4 4.1 AWT 각 컴포넌트 알아보기 Component 클래스의 기본적인 메소드들
void add(PopupMenu) - 컴포넌트에 팝업메뉴를 붙인다. Color getForeground() - 컴포넌트의 전경색을 리턴 Graphics getGraphics() - Graphics 객체를 리턴 String getName() - 컴포넌트의 이름을 리턴 Container getParent() - 컴포넌트를 포함하는 컨테이너를 리턴 Dimension getSize() - 컴포넌트의 크기를 리턴 boolean isEnabled() - 컴포넌트가 현재 활성화되어 있나 알아본다. boolean isVisible() - 컴포넌트가 현재 화면에 보이는가 알아본다. void setBackground(Color) - 컴포넌트의 배경색을 설정 void setEnabled(boolean) - 컴포넌트를 활성화/비활성화시킨다. void setFont(Font) - 컴포넌트의 폰트를 설정 void setForeground(Color) - 컴포넌트의 전경색을 설정 void setLocation(int, int) - 컴포넌트의 위치를 설정 void setSize(int, int) - 컴포넌트의 크기를 설정 void setVisible(boolean) - 컴포넌트를 화면에 보이도록/안보이도록 한다

5 4.1 AWT 각 컴포넌트 알아보기 4.1.1 프레임(Frame) 생성자 Frame() Frame(String title)
프레임을 생성한 후, 프레임의 크기를 결정해야 프레임의 크기는 setSizse(int width, int height)라는 메소드를 이용 아규먼트는 픽셀 단위의 윈도우의 폭과 높이가 들어간다. 윈도우를 화면에 보여주기 위해서는 setVisible(true) 함수를 호출하여야 cf) setVisible(false) setTitle(String) 메소드는 프레임의 타이틀을, setCursor(int) 메소드는 커서 타입을 설정 pack() 메소드는 프레임을 프레임이 가지고 있는 컴포넌트의 크기에 맞게 프레임 크기를 결정

6 4.1 AWT 각 컴포넌트 알아보기 예제 : FrameDemo.java 결과
1 import java.awt.*; 2 3 public class FrameDemo { public static void main(String[] args) { Frame f = new Frame("FrameDemo"); f.setSize(300, 200); f.setVisible(true); } 9 } 결과 OpenWindow (Unix) Window(PC)

7 4.1 AWT 각 컴포넌트 알아보기 4.1.2 라벨 (Label) 라벨은 문자열을 나타내는 컴포넌트 생성자 Label()
Label(String text) Label(String text, int alignment) alignment :- Label.LEFT, Label.RIGHT, Label. CENTER 라벨에는 문자열의 내용을 알아오는 getText(), 문자열의 내용을 설정하는 setText(String text) 등의 메소드들을 가짐

8 4.1 AWT 각 컴포넌트 알아보기 예제 : LabelDemo.java 1 import java.awt.*; 2
3 public class LabelDemo extends Frame { Label label; 5 public LabelDemo() { super("LabelDemo"); setLayout(new FlowLayout()); label = new Label("저는 라벨입니다."); add(label); setSize(300, 200); setVisible(true); } 14 public static void main(String args[]) { new LabelDemo(); } 18 }

9 4.1 AWT 각 컴포넌트 알아보기 설 명 결과 8 setLayout(new FlowLayout());
레이아웃 매니저는 4.2절에서 결과 Unix Windows

10 4.1 AWT 각 컴포넌트 알아보기 4.1.3 버튼(Button) 마우스로 클릭해서 작동시킬 수 있는 것 생성자
Button(String title) 아규먼트는 버튼의 타이틀로 사용 버튼을 생성한 후 add() 메소드를 사용해서 프레임에 부착시켜야 getLabel() 메소드를 이용해서 버튼의 타이틀을 읽어올 수 있다. setLabel(String) 메소드를 이용해서 버튼의 타이틀을 변경 JDK1.1 이벤트 모델을 사용하는 경우, setActionCommand(String) 메소드를 이용해서 액션 커맨드를 설정

11 4.1 AWT 각 컴포넌트 알아보기 예제 : ButtonDemo.java 1 import java.awt.*; 2
3 public class ButtonDemo { 4 public static void main(String[] args) { Frame f = new Frame("ButtonDemo"); 7 f.setLayout(new FlowLayout()); Button b = new Button("OK"); f.add(b); f.setSize(300, 200); f.setVisible(true); ………..

12 4.1 AWT 각 컴포넌트 알아보기 4.1.4 체크박스(Checkbox)
마우스 클릭에 의해 선택/비선택이 토글(toggle)되는 버튼 생성자 Checkbox() - 라벨이 없는 체크박스 Checkbox(String) - String을 라벨로 갖는 체크박스 Checkbox(String, boolean) - String을 라벨로 갖고, boolean을 이용해 체크박스 초기 상태의 On/Off를 결정 Checkbox(String, CheckboxGroup, boolean) 체크박스를 이용해 라디오버튼을 만들 때 사용 getLabel(), setLabel(String) 메소드 라벨을 읽어오거나 설정 getState(), setState(boolean) 메소드 체크박스의 On/Off 상태를 읽어오거나 값을 설정

13 4.1 AWT 각 컴포넌트 알아보기 예제 : CheckboxDemo.java 1 import java.awt.*; 2
3 public class CheckboxDemo { 4 public static void main(String[] args) { Frame f = new Frame("CheckboxDemo"); 7 f.setLayout(new FlowLayout()); Checkbox one = new Checkbox("One"); Checkbox two = new Checkbox("Two"); Checkbox three = new Checkbox("Three"); f.add(one); f.add(two); f.add(three); f.setSize(300, 200); f.setVisible(true); } …….

14 4.1 AWT 각 컴포넌트 알아보기 4.1.5 라디오 버튼(Radio Button)
체크박스가 CheckboxGroup 클래스와 사용될 때 라디오 버튼으로 사용 체크박스는 개별적으로 선택할 수 있는 버튼 라디오 버튼은 체크박스그룹 내에서 한 버튼만 선택 생성자 Checkbox(String, CheckboxGroup, boolean) 세번째 아규먼트는 라디오 버튼의 처음 상태를 표시 true이면 선택된 상태 false이면 선택되지 않은 상태

15 4.1 AWT 각 컴포넌트 알아보기 예제 : RadioDemo.java 1 import java.awt.*; 2
3 public class RadioDemo extends Frame { CheckboxGroup cbg; 5 public RadioDemo() { super("RadioDemo"); setLayout(new FlowLayout()); cbg = new CheckboxGroup(); add(new Checkbox("Yes",cbg,true)); add(new Checkbox("No",cbg,false)); setSize(300, 200); setVisible(true); } 15 public static void main(String args[]) { new RadioDemo(); } ………...

16 4.1 AWT 각 컴포넌트 알아보기 4.1.6 선택버튼 (Choice Button)
마우스로 클릭하면 선택할 수 있는 내용들이 나오는 형태의 버튼 생성자 Choice() add(String) 메소드 선택 버튼을 생성한 후, 선택할 수 있는 항목들을 추가 getItemCount() 메소드 아이템의 개수를 알아보기 위해서 이용 getItem(int), remove(int) 메소드 특정 위치에 있는 아이템을 알아보거나 제거 getSelectedItem() 메소드 현재 선택된 아이템을 알아보기 위해서 insert(String, int) 메소드 특정 위치에 아이템을 삽입하기 위해서 아이템의 인덱스는 0번부터 시작

17 4.1 AWT 각 컴포넌트 알아보기 예제 : ChoiceDemo.java 1 import java.awt.*; 2
3 public class ChoiceDemo { 4 public static void main(String[] args) { Frame f = new Frame("ChoiceDemo"); 7 f.setLayout(new FlowLayout()); Choice choice = new Choice(); choice.add("One"); choice.add("Two"); choice.add("Three"); choice.add("Four"); choice.add("Five"); choice.add("Six"); f.add(choice); f.setSize(300, 200); f.setVisible(true); } ………...

18 4.1 AWT 각 컴포넌트 알아보기 4.1.7 리스트 (List)
여러 개의 항목들 중에서 하나 혹은 여러 개를 선택할 수 있는 것 생성자 List() - 리스트를 생성 List(int rows) - rows 수 만큼 아이템이 보이도록 List(int rows, boolean multipleMode) - boolean 아규먼트는 리스트에서 다중 선택 허용 여부를 결정 true이면 다중 선택이 가능; false이면 단일 선택만 add(String item) 메소드 아이템을 추가 remove(int index) 메소드 특정 위치의 아이템을 삭제 select(int index), deselect(int index) 메소드 아이템을 선택하거나 선택을 취소

19 4.1 AWT 각 컴포넌트 알아보기 예제 : ListDemo.java 1 import java.awt.*; 2
3 public class ListDemo { 4 public static void main(String[] args) { Frame f = new Frame("ListDemo"); 7 f.setLayout(new FlowLayout()); List list = new List(5, false); list.add("One"); list.add("Two"); list.add("Three"); …………. f.add(list); f.setSize(300, 200); f.setVisible(true); } ……………..

20 4.1 AWT 각 컴포넌트 알아보기 4.1.8 택스트 영역 (TextArea) 여러 줄에 걸쳐 문서를 작성할 수 있는 컴포넌트
생성자 TextArea() - 택스트영역을 만든다 TextArea(String text) - String을 초기 내용으로 갖는 텍스트영역을 만든다 TextArea(int rows, int columns) - rows 행과 columns 열 크기의 텍스트 영역을 만든다 TextArea(String text, int rows, int columns) - String을 초기 내용으로 갖고, rows 행과 columns 열 크기의 텍스트 영역을 만든다 append(String) 메소드 - 텍스트영역에 문자열을 추가 setText(String) 메소드 - 텍스트 영역에 문자열로 설정 getText() 메소드 - 텍스트 영역에 있는 내용을 읽어오기 위해서 insert(String, int) 메소드 - 문자열을 특정 위치에 삽입

21 4.1 AWT 각 컴포넌트 알아보기 예제 : TextAreaDemo.java 1 import java.awt.*; 2
3 public class TextAreaDemo { 4 public static void main(String[] args) { Frame f = new Frame("TextAreaDemo"); 7 f.setLayout(new FlowLayout()); TextArea text = new TextArea("Hello", 5, 30); f.add(text); f.setSize(300, 200); f.setVisible(true); } 14 }

22 4.1 AWT 각 컴포넌트 알아보기 4.1.9 텍스트필드 (TextField) 텍스트필드는 한줄만 쓸 수 있는 텍스트영역
생성자 TextField() TextField(int columns) TextField(String text) TextField(String text, int columns) 각 생성자는 한 줄만 사용할 수 있다는 것을 제외하고는 텍스트영역과 동일 setEchoChar(char) 메소드 화면에 아규먼트로 설정된 문자만 출력되도록 주로 패스워드를 입력하는 부분에 이용

23 4.1 AWT 각 컴포넌트 알아보기 예제 : TextFieldDemo.java 1 import java.awt.*; 2
3 public class TextFieldDemo { 4 public static void main(String[] args) { Frame f = new Frame("TextFieldDemo"); 7 f.setLayout(new FlowLayout()); TextField text = new TextField("Hello", 30); f.add(text); f.setSize(300, 200); f.setVisible(true); …………..

24 4.1 AWT 각 컴포넌트 알아보기 4.1.10 스크롤바 (Scrollbar) 가로 혹은 세로 형태의 스크롤바를 만들 때 사용
생성자 Scrollbar(Scrollbar.VERTICAL) Scrollbar(Scrollbar.HORIZONTAL) 생성자의 아규먼트는 스크롤바의 방향성을 결정 Scrollbar.VERTICAL - 세로 방향의 스크롤바를 생성 Scrollbar.HORIZONTAL - 가로 방향의 스크롤바를 생성

25 4.1 AWT 각 컴포넌트 알아보기 예제 : ScrollbarDemo.java 1 import java.awt.*; 2
3 public class ScrollbarDemo { 4 public static void main(String[] args) { Frame f = new Frame("ScrollbarDemo"); 7 f.setLayout(new FlowLayout()); Scrollbar Vscroll = new Scrollbar(Scrollbar.VERTICAL); Scrollbar Hscroll = new Scrollbar(Scrollbar.HORIZONTAL); f.add(Vscroll); f.add(Hscroll); f.setSize(300, 200); f.setVisible(true); } …………..

26 4.1 AWT 각 컴포넌트 알아보기 4.1.11 캔버스 (Canvas) 주로 그림을 그리는 경우에 많이 사용되는 자바 컴포넌트
직접 사용되지 않고 상속 받아서 사용한다. 생성자 Canvas()

27 4.1 AWT 각 컴포넌트 알아보기 예제 : CanvasDemo.java 1 import java.awt.*; 2
3 public class CanvasDemo extends Frame { Canvas canvas; 5 public CanvasDemo() { super("CanvasDemo"); canvas = new Canvas(); canvas.setSize(200,100); canvas.setBackground(Color.white); add("South", canvas); setSize(300, 200); setVisible(true); } 15 public static void main(String args[]) { new CanvasDemo(); } ………….

28 4.1 AWT 각 컴포넌트 알아보기 4.1.12 패널 (Panel) 다른 컴포넌트를 포함할 수 있는 컨테이너
다른 컨테이너에 원하는 형태로 컴포넌트를 붙이기 위해서 이용 보통 패널은 화면에 보이지 않는다. 생성자 Panel() Panel(LayoutManager layout)

29 4.1 AWT 각 컴포넌트 알아보기 예제 : PanelDemo.java 1 import java.awt.*; 2
3 public class PanelDemo extends Frame { Panel panel; 5 public PanelDemo() { super("PanelDemo"); setLayout(null); panel = new Panel(); panel.setSize(80, 50); panel.setBackground(Color.blue); panel.setLocation(50, 50); add(panel); setSize(300, 200); setVisible(true); } 17 public static void main(String args[]) { new PanelDemo(); ……..

30 4.1 AWT 각 컴포넌트 알아보기 4.1.13 스크롤 팬 (ScrollPane)
윈도우에서 스크롤을 기본적으로 가지고 있는 자바 컨테이너 생성자 ScrollPane() ScrollPane(int scrollbarDisplayPolicy) 스크롤 팬은 하나의 컴포넌트만 자식으로 가질 수 있음 -- 주의!! 여러 개의 컴포넌트를 스크롤 팬에 포함시키기 위해서는 패널을 스크롤 팬의 자식으로 하고 패널에 여러 컴포넌트를 붙임

31 4.1 AWT 각 컴포넌트 알아보기 4.1.14 팝업 메뉴 (Popup Menu)
평소에는 안보이다가 마우스를 누르면 나타나는 메뉴 생성자 PopupMenu() PopupMenu(String label) 문자열은 메뉴의 이름을 나타내는데 사용 add() 함수 - 팝업 메뉴의 메뉴들을 추가 show() 함수 - 메뉴를 보여주기 위해서 hide() 함수 - 메뉴를 감추기 위해서 이용 예제의 캔버스뿐만 아니라 다른 컴포넌트에서도 팝업 메뉴를 사용할 수 있다

32 4.1 AWT 각 컴포넌트 알아보기 예제 : PopupDemo.java 1 import java.awt.*;
2 import java.awt.event.*; 3 4 public class PopupDemo extends Frame implements MouseListener { Canvas canvas; PopupMenu popup; 7 public PopupDemo() { super("PopupDemo"); canvas = new Canvas(); canvas.setSize(200,100); canvas.setBackground(Color.white); canvas.addMouseListener(this); 14 popup = new PopupMenu("POP-UP"); popup.add(new MenuItem("copy")); popup.add(new MenuItem("paste")); Menu col = new Menu("color"); col.add(new MenuItem("white")); col.add(new MenuItem("blue")); popup.add(col); canvas.add(popup); 23 add("South", canvas); setSize(300, 200); setVisible(true); } 28 public void mousePressed(MouseEvent e) { popup.show(canvas, e.getX(), e.getY()); } 32 public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseClicked(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} 37 public static void main(String args[]) { new PopupDemo(); } 41 }

33 4.2 AWT 컴포넌트 붙이기 화면에 AWT 구성 요소들의 크기와 위치는 2가지 요소에 의해서 결정
사용되는 레이아웃 매니저 화면에서 각 AWT요소들의 위치를 결정 각 컨테이너는 하나의 레이아웃매니저를 가질 수 있다. setLayout() 메소드를 이용하여 레이아웃매니저 설정 자바에서는 기본적인 5가지 레이아웃을 제공 "FlowLayout” "GridLayout” "BorderLayout” "CardLayout” "GridBagLayout"

34 4.2 AWT 컴포넌트 붙이기 4.2.1 플로우 레이아웃 (FlowLayout)
컨테이너에 컴포넌트들을 가로방향으로 늘어놓을 때 사용 만약 구성 요소들이 한 줄에 들어가지 않으면 다음 줄로 이동 각 줄 안에서 정렬위치를 결정할 수 있는 alignment 값을 가짐 alignment의 기본 값은 "CENTER"이고, 이것은 구성 요소를 중앙에 정렬 패널과 애플릿은 기본적으로 플로우 레이아웃을 이용 생성자 setLayout(new FlowLayout()) - 플로우 레이아웃을 사용, 각 컴포넌트간의 간격은 가로/세로 5픽셀 컴포넌트의 정렬 위치는 컨테이너의 가운데 setLayout(new FlowLayout(FlowLayout.LEFT)) - 플로우 레이아웃을 사용, 각 컴포넌트간의 간격은 가로/세로 5픽셀 정렬위치: FlowLayout.LEFT, FlowLayout. CENTER, FlowLayout.RIGHT setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 10)) - 플로우 레이아웃을 사용, 각 컴포넌트간의 간격은 가로 5 , 세로 10 픽셀

35 4.2 AWT 컴포넌트 붙이기 예제 : FlowTestOne.java 1 import java.awt.*; 2
3 public class FlowTestOne extends Frame { public FlowTestOne() { super("FlowTestOne"); setLayout(new FlowLayout()); add(new Button("1")); add(new Button("2")); ……………... add(new Button("7")).setVisible(false); add(new Button("8")); setSize(300, 200); setVisible(true); } 21 public static void main(String args[]) { new FlowTestOne(); } 25 }

36 4.2 AWT 컴포넌트 붙이기 4.2.2 보더 레이아웃 (BorderLayout)
컨테이너에서 컴포넌트들의 위치를 "동/서/남/북/중앙" 중에서 하나를 지정. 모든 가장 자리의 요소들은 필요한 크기만큼 자리를 차지하고, 중앙에 있는 요소는 남은 여백을 사용 생성자 setLayout(new BorderLayout()) 보더 레이아웃을 사용하고, 각 컴포넌트간의 간격은 0 setLayout(new BorderLayout(5, 10)) 보더 레이아웃을 사용하고, 각 컴포넌트간의 가로 간격은 5, 세로 간격은 10 픽셀 add("North", new TextField("Name", 30)) 텍스트필드 컴포넌트를 북쪽(North)에 붙인다 보더 레이아웃을 이용해서 컴포넌트를 붙이는 경우에 North/South/West/East/Center의 위치를 정확히 기술해주어야

37 4.2 AWT 컴포넌트 붙이기 예제 : BorderTestOne.java 2
1 import java.awt.*; 2 3 public class BorderTestOne extends Frame { public BorderTestOne() { super("BorderTestOne"); setLayout(new BorderLayout(5, 5)); add("North", new Button("North")); add("Center", new Button("Center")); add("South", new Button("South")); add("West", new Button("West")); add("East", new Button("East")); …………. public static void main(String args[]) { new BorderTestOne(); } …………..

38 4.2 AWT 컴포넌트 붙이기 4.2.3 그리드 레이아웃 (GridLayout)
컴포넌트들을 행렬식으로 행과 열의 수에 맞게 배치할 때 사용 그리드 레이아웃을 생성하기 위해서는 행과 열을 지정한다. 컴포넌트들의 위치: 맨 윗줄부터 왼쪽에서 오른쪽으로 움직이며 각 줄을 이동 add() 메소드를 호출하는 순서에 따라 컴포넌트의 위치가 변경 각 행과 열의 크기가 동일하므로 컴포넌트는 동일한 크기를 갖는다 생성자 setLayout(new GridLayout(3,4)) - 3행 4열의 그리드 레이아웃을 이용해 컴포넌트를 붙인다. setLayout(new GridLayout(2,0)) - 0이 들어있는 경우는 행과 열의 수가 결정되지 않았음을 의미 이 경우에는 2행과 임의의 열을 갖는 그리드 레이아웃이다. setLayout(new GridLayout(3,4,10,15)) 행 4열 그리드 레이아웃에 가로 간격이 10 픽셀, 세로 간격이 15 픽셀

39 4.2 AWT 컴포넌트 붙이기 예제 : GridTestOne.java 2
1 import java.awt.*; 2 3 public class GridTestOne extends Frame { public GridTestOne() { super("GridTestOne"); setLayout(new GridLayout(3,2)); add(new Button("1")); add(new Button("2")); ………………….. } 16 public static void main(String args[]) { new GridTestOne(); } 20 }

40 4.2 AWT 컴포넌트 붙이기 4.2.4 카드 레이아웃 (CardLaytout) 카드 레이아웃은 카드 형식으로 된 레이아웃
여러 장의 카드를 만들어 놓고 필요한 경우에 원하는 형태의 카드를 화면에 보여주는 방식 작성 절차 1. 다음과 같은 생성자를 이용해서 만든다 CardLayout card = new CardLayout(); 2. 컨테이너에 setLayout() 메소드를 이용해서 카드 레이아웃 매니저를 등록 setLayout(card); 3. 카드 레이아웃을 등록한 다음에 여러 장의 카드를 위해서 패널을 만든다 Panel p1 = new Panel(); Panel p2 = new Panel(); 4. 만들어진 여러 장의 패널을 컨테이너에 add() 메소드를 이용해서 붙인다 add("First", p1) - "First"는 카드의 이름 부분이다 따라서 p1 패널은 "First"라는 이름으로 등록 5. 원하는 카드를 보여주기 위해서는 show() 메소드를 이용 card.show(this, "First") - show(Container parent, String name) 형태 parent는 카드 레이아웃이 포함되어 있는 컨테이너를, name은 보여줄 카드의 이름을 의미

41 4.2 AWT 컴포넌트 붙이기 예제 : SimpleCard.java 1 import java.awt.*;
2 import java.awt.event.*; 3 4 public class SimpleCard extends Frame { 5 Panel p1, p2, p3, p4, p5; Label l1, l2, l3, l4, l5; 8 CardLayout card; 10 public SimpleCard() { super("SimpleCard"); setLayout(card = new CardLayout()); p1 = new Panel(); p2 = new Panel(); p3 = new Panel(); p4 = new Panel(); p5 = new Panel(); 19 l1 = new Label("First Panel"); p1.setBackground(Color.yellow); 22 l2 = new Label("Second Panel"); p2.setBackground(Color.green); 25 l3 = new Label("Third Panel"); p3.setBackground(Color.magenta); 28 l4 = new Label("Fourth Panel"); p4.setBackground(Color.white); 31 l5 = new Label("Fifth Panel"); p5.setBackground(Color.cyan); 34 MouseHandler handler = new MouseHandler(); 36 p1.add(l1); p1.addMouseListener(handler); p2.add(l2); p2.addMouseListener(handler); p3.add(l3); p3.addMouseListener(handler); p4.add(l4); p4.addMouseListener(handler); p5.add(l5); p5.addMouseListener(handler); 47 add("First", p1); add("Second", p2); add("Third", p3); add("Fourth", p4); add("Fifth", p5); 53 card.show(this, "First"); setSize(300, 200); setVisible(true); } 58

42 4.2 AWT 컴포넌트 붙이기 결과 % java SimpleCard
public class MouseHandler extends MouseAdapter { public void mouseClicked(MouseEvent e) { card.next(SimpleCard.this); } } 64 public static void main(String args[]) { new SimpleCard(); } 68 } 결과 % java SimpleCard

43 4.2 AWT 컴포넌트 붙이기 4.2.5 그리드백 레이아웃 (GridBagLayout)
컴포넌트의 위치와 크기를 자유롭게 만들 수 있는 레이아웃 매니저 컴포넌트의 위치와 크기를 자유자재로 할 수 있지만, 사용하기가 복잡하기 때문에 많이 사용되지 않는 레이아웃 매니저 작성절차 1. 생성자를 이용해서 그리드백 레이아웃을 만든다. GridBagLayout gridbag = new GridBagLayout(); 2. 그리드백 콘스트레인트를 만든다. GridBagConstraints constraint = new GridBagConstraints(); 3. 컨테이너의 레이아웃 매니저를 그리드백 레이아웃으로 설정 setLayout(gridbag); 4. 그리드백 콘센트레인트에 변수 값을 할당 constraint.weightx = 1.0; 5. 컴포넌트와 컴포넌트의 그리드백 콘스트레인트를 설정 gridbag.setConstraints(b1, constraint); 6. 그리드백 레이아웃에 컴포넌트를 붙인다. add(b1);

44 4.2 AWT 컴포넌트 붙이기 그리드 백 컨스트레이트 변수 gridx, gridy
컴포넌트의 좌측 상단 모서리의 시작 위치를 지정 화면의 좌측 상단 모서리의 좌표 값은 gridx=0, gridy=0 GridBagConstraints.RELATIVE 컴포넌트의 좌측 상단 시작 위치를 이전 컴포넌트가 끝나는 곳 다음부터 (이전 컴포넌트의 오른쪽/아래쪽) 사용하고자 할 때 gridwidth, gridheight 컴포넌트가 화면에 출력되는 행과 열의 셀(cell) 수를 지정 기본값은 1로 설정되어 있다. gridwidth = GridBagConstraints.REMAINDER이면 행의 마지막에 위치, gridheight = GridBagConstraints.REMAINDER이면 열의 마지막에 위치 GridBagConstraints.RELATIVE로 설정되면 행과 열의 마지막 컴포넌트 옆에 위치

45 4.2 AWT 컴포넌트 붙이기 fill 컴포넌트의 크기가 컨테이너보다 커야할 때 사용
GridBagConstraints.NONE으로 설정되면 컨테이너의 크기는 불변 GridBagConstraints.HORIZONTAL으로 설정되면 가로축이 확장 GridBagConstraints.VERTICAL으로 설정되면 세로축이 확장 GridBagConstraints.BOTH인 경우에는 가로/세로 방향으로 모두 확장 ipadx, ipady 내부의 여백을 결정 insets 컴포넌트의 바깥쪽 여백을 결정

46 4.2 AWT 컴포넌트 붙이기 Anchor 컴포넌트의 크기가 컨테이너보다 작은 경우에 컴포넌트 위치를 결정 사용 가능한 값들
GridBagConstraints.CENTER (가운데, 기본값) GridBagConstraints.NORTH (북쪽) GridBagConstraints.NORTHEAST (북동쪽) GridBagConstraints.EAST (동쪽) GridBagConstraints.SOUTHEAST (남동쪽) GridBagConstraints.SOUTH (남쪽) GridBagConstraints.SOUTHWEST (남서쪽) GridBagConstraints.WEST (서쪽) GridBagConstraints.NORTHWEST (북서쪽) weightx, weighty 컴포넌트의 크기가 변경될 때 변경되는 크기를 제어 만약 weightx, weighty의 값이 0인 경우에는 크기가 변경되지 않는다. 값이 0이 아닌 경우에는 값에 비례해서 크기가 변경

47 4.2 AWT 컴포넌트 붙이기 예제 : SimpleGridBag.java 1 import java.awt.*; 2
3 public class SimpleGridBag extends Frame { 4 public SimpleGridBag() { super("SimpleGridBag"); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints constraint = new GridBagConstraints(); setLayout(gridbag); 10 constraint.fill = GridBagConstraints.BOTH; constraint.weightx = 1.0; Button b1 = new Button("Button1"); gridbag.setConstraints(b1, constraint); add(b1); 16 Button b2 = new Button("Button2"); gridbag.setConstraints(b2, constraint); add(b2); 20 constraint.gridwidth = GridBagConstraints.REMAINDER; Button b3 = new Button("Button3"); gridbag.setConstraints(b3, constraint); add(b3); 25 constraint.gridwidth = 1; constraint.gridheight = 2; Button b4 = new Button("Button4"); gridbag.setConstraints(b4, constraint); add(b4);

48 4.2 AWT 컴포넌트 붙이기 결과 % java SimpleGridBag 31
constraint.gridwidth = GridBagConstraints.REMAINDER; constraint.gridheight = 1; constraint.weighty = 0.0; Button b5 = new Button("Button5"); gridbag.setConstraints(b5, constraint); add(b5); 38 Button b6 = new Button("Button6"); gridbag.setConstraints(b6, constraint); add(b6); 42 pack(); setVisible(true); } 46 public static void main(String args[]) { new SimpleGridBag(); } 50 } 결과 % java SimpleGridBag

49 4.2 AWT 컴포넌트 붙이기 4.2.6 레이아웃 매니저 사용 안 하기 예제 : NoLayout.java
setLayout(null) 각 컴포넌트의 크기와 위치를 프로그래머가 지정함 플랫폼 환경이 변하거나 프레임의 크기가 변경되는 경우: 컴포넌트의 크기나 위치가 프로그래머가 원하는 것과 다르게 나올 수 있다 예제 : NoLayout.java ……... 3 public class NoLayout extends Frame { TextArea display; ……….. public NoLayout() { super("No Layout Manager"); setResizable(false); setLayout(null); setSize(500, 400); display = new TextArea(5, 15); display.setSize(220, 200); display.setLocation(210, 50); add(display);

50 4.2 AWT 컴포넌트 붙이기 PositionLayout
컨테이너에서 컴포넌트의 위치와 크기를 백분율(%)로 표시할 수 있는 레이아웃 매니저 PositionLayout에서 add() 메소드 사용법 add("20%, 10%, 80%, 40%", new Button("A")); 컨테이너에 A라는 컴포넌트를 붙이는 경우에 A의 시작 위치와 끝 위치를 컨테이너 크기의 백분율로 표기

51 4.3 메뉴 만들기 메뉴는 프레임에만 붙일 수 있다 프레임에는 하나의 메뉴바가 있고, 프레임에 메뉴바를 붙일 때는 setMenuBar() 메소드를 이용 메뉴바에는 여러 개의 메뉴가 있을 수 있고, 메뉴를 마우스로 클릭하는 경우에 메뉴 아이템들이 보여진다 메뉴바, 메뉴, 메뉴아이템들의 관계

52 4.3 메뉴 만들기 예제 : MenuBarDemo.java
3 public class MenuBarDemo extends Frame { 4 MenuBar mb; 5 6 public MenuBarDemo() { super("MenuBar Test"); mb = new MenuBar(); setMenuBar(mb); Menu file = new Menu("File"); MenuItem fileNew = new MenuItem("New"); …………... file.add(fileNew); …………… file.addSeparator(); file.add(fileExit); Menu edit = new Menu("Edit"); Menu sort = new Menu("Sort"); CheckboxMenuItem byname = new CheckboxMenuItem("by Name"); CheckboxMenuItem bysize = new CheckboxMenuItem("by Size"); sort.add(byname); sort.add(bysize); edit.add(sort); ……….

53 4.3 메뉴 만들기 결과 27 mb.add(file); 28 mb.add(edit); 29 mb.add(help);
Menu help = new Menu("Help"); mb.add(file); mb.add(edit); mb.add(help); mb.setHelpMenu(help); ………………. } 34 public static void main(String args[]) { new MenuBarDemo(); } 38 } 결과 % java MenuBarDemo

54 4.4 다이얼로그 4.4.1 다이얼로그 (Dialog) 다이얼로그는 프레임과 유사한 형태의 윈도우
다이얼로그는 주로 오류/경고/확인 메시지를 보여주기 위해서 사용 생성자 Dialog(Frame) - 다이얼로그는 프레임을 아규먼트로 만들 수 있다. Dialog(Frame, boolean) - 부울린 부분에는 모달(modal)을 가질 것인가 여부를 결정 true이면 모달을 갖는다. 모달이 있는 경우에는 다이얼로그의 입력이 있을 때까지 프레임은 사용할 수 없다. Dialog(Frame, String) String 아규먼트는 다이얼로그의 타이틀로 사용 Dialog(Frame, String, boolean) - String 아규먼트는 다이얼로그의 타이틀로 사용되고, boolean 부분은 모달의 사용여부를 결정

55 4.4 다이얼로그 예제 : DialogTest.java 1 import java.awt.*; 2
3 class DialogTest extends Frame { Dialog d; 5 public DialogTest(String title) { super(title); d = new Dialog(this, "Dialog", false); d.add("Center", new Label("This is a Dialog.")); d.add("South", new Button(" OK ")); d.pack(); d.setVisible(true); …………. public static void main(String args[]) { new DialogTest("DialogTest"); } 20 }

56 4.4 다이얼로그 4.4.2 파일 다이얼로그 (FileDialog)
파일 다이얼로그는 파일을 읽거나 저장하기 위해서 원하는 파일을 선택 생성자 FileDialog(Frame) - 다이얼로그와 마찬가지로 프레임을 아규먼트로 만들 수 있다. FileDialog(Frame, String) - String은 파일다이얼로그의 타이틀로 사용 FileDialog(Frame, String, int) - String은 파일다이얼로그의 타이틀을, int 부분은 모드(mode)를 표시 모드는 FileDialog.LOAD, FileDialog.SAVE 두 가지 값을 가질 수 있다 FileDialog.LOAD :- 읽을 수 있는 파일들이 파일 다이얼로그에 나타나고, FileDialog.SAVE :- 기록할 수 있는 파일들이 나타난다

57 4.4 다이얼로그 예제 : FileDialogTest.java 1 import java.awt.*; 2
3 class FileDialogTest extends Frame { FileDialog fd; 5 public FileDialogTest(String title) { super(title); fd = new FileDialog(this, "FileDialog"); setSize(300, 200); setVisible(true); fd.setVisible(true); } 13 public static void main(String args[]) { new FileDialogTest("DialogTest"); } 17 }

58 4.5 AWT 프린트 하기 AWT 컴포넌트를 프린트할 수 있도록 하기 위해서 JDK에서는 PrintJob 클래스를 지원
작성 절차 1. 프레임을 이용해서 PrintJob 객체를 만든다. 2. PrintJob 객체의 Graphics 객체를 얻어온다. 3. PrintJob의 Graphics를 이용해서 원하는 컴포넌트나 그림을 그린다. 4. Graphics를 dispose()시키고, PrintJob을 end()시킨다.

59 4.5 AWT 프린트 하기 예제 : PrintTest.java 1 import java.awt.*; 2
3 public class PrintTest { public static void main(String args[]) { Frame f = new Frame("test"); f.pack(); 7 PrintJob pj = f.getToolkit().getPrintJob(f, "print1", null); 9 if(pj != null) { Graphics g = pj.getGraphics(); g.drawOval(5, 5, 150, 100); FontMetrics fm = g.getFontMetrics(); int height = fm.getHeight(); for(int i = 0; i < 50; i++) { g.drawString(i+": Hello ~", 30, 200+i*height); } g.dispose(); pj.end(); } System.exit(0); } 23 }


Download ppt "프로그래머를 위한 Java 2 제4장 AWT 프로그래밍"

Similar presentations


Ads by Google