270 likes | 527 Views
AWT 프로그래밍. 컴퓨터정보과 안유정 교수 연구동 410 호 youjahn@gmail.com. AWT programming. AWT A bstract W indow T oolkit 윈도우 기반으로 자바에서 GUI 를 작성할 수 있도록 함 GUI(Graphic User Interface) 자바 AWT 는 java.awt 패키지 를 통하여 제공 java.awt 패키지안에 인터페이스와 이벤트에 관련된 클래스들이 들어있다. AWT Programming. 컴포넌트 (Component)
E N D
AWT 프로그래밍 컴퓨터정보과 안유정 교수 연구동 410호 youjahn@gmail.com
AWT programming • AWT • Abstract Window Toolkit • 윈도우 기반으로 자바에서 GUI를 작성할 수 있도록 함 • GUI(Graphic User Interface) • 자바 AWT는 java.awt 패키지를 통하여 제공 • java.awt 패키지안에 인터페이스와 이벤트에 관련된 클래스들이 들어있다.
AWT Programming • 컴포넌트(Component) • 화면을 구성하는 사용자 인터페이스 요소 • 예) 버튼, 체크박스, 선택박스, 리스트, 텍스트, 다이얼로그 박스, 메뉴, 스크롤바등 • 컴포넌트들은 각각 클래스로 정의되어 있으며 추상 클래스인 java.awt.Component의 하위 클래스이다. • 이벤트 프로그래밍 • 각 컴포넌트에 대한 사용자의 행동을 처리할 수 있게 하는 방법 • 대부분의 컴포넌트들은 한 개 이상의 이벤트들과 연관된다. • 자바에서는 각 이벤트들을 클래스로 정의하고 있다. • 예) 버튼을 클랙하는 이벤트 : ActionEvent 클래스
AWT Programming • 컴포넌트 클래스들 • 대부분 java.awt 패키지내 • 에 정의되어 있다. Button Checkbox Choice CheckboxGroup CheckboxGroup List TextField Label Object Object java.applet 패키지 안의 클래스 java.applet TextComponent TextArea Component Applet Container Panel Applet Canvas Frame Frame Window Scrollbar Dialog FileDialog ScrollPane Window MenuBar MenuBar MenuComponent MenuItem Menu Menu CheckboxMenuItem BorderLayout FlowLayout FlowLayout GridLayout GridLayout Class GridLayout GridLayout CardLayout CardLayout Abstract class
이벤트 종류 • 자바의 이벤트 클래스들 ActionEvent 버튼이 눌려지거나, 리스트의 한 항목이 더블 클릭되어 선택되거나, 메뉴의 한 항목이 선택되었을 때 발생 AdjustmentEvent 사용자가 스크롤바를 움직였을 때 발생 ComponentEvent 컴포넌트가 감춰지거나, 감춰진 상태에서 다시 나타날 때, 컴포넌트를 이동하였을 때, 크기를 조정하였을 때 발생 ContainerEvent 컨테이너에 컴포넌트가 추가되거나 제거 되었을 때 발생(18장 참조) FocusEvent 컴포넌트가 키보드 입력을 받아들일 수 있는 초점(focus)을 획득하거나, 초점을 잃었을 때 발생 ItemEvent 체크박스나 리스트의 한 항목이 선택되었을 때, 메뉴의 한 항목이 선택되거나, 선택된 항목이 해제되었을 때 발생 KeyEvent 키보드로부터 입력이 일어났을 때 발생 MouseEvent 마우스의 버튼이 눌려지고 띠어질 때, 움직일 때, 드래그(drag) 할 때, 마우스의 초점이 컴포넌트 영역에 들어가거나 나올 때 발생 TextEvent text area나 text field에서 값이 입력될 때 발생 WindowEvent 윈도우가 활성화(activate)되거나 비활성화 될 때, 아이콘화 될 때, 아이콘으로부터 윈도우로 복구될 때, 윈도우가 open, close, quit 될 때 발생
이벤트 프로그래밍 순서 • 사용될 인터페이스와 이벤트들을 포함할 클래스를 만들자 public class MyButton extends Applet implements ActionListener • 인터페이스인 컴포넌트 객체를 만들자 Button b = new Button(“확인”); • 만든 컴포넌트 객체에 이벤트를 연결하자 b.addActionListener(this); • 만든 컴포넌트를 결과 창에 출력하자 add(b); • 이벤트 발생할때 무슨일을 해야하는지 프로그램하자 public void actionPerformed (ActionEvent ae) { …… // 예 : 버튼 클릭하면 창이 열리도록 }
컴포넌트(버튼) • Button 클래스 • 버튼을 만들때 사용하는 자바의 클래스 • 버튼클릭하는 이벤트는ActionEvent • Button 클래스에 속한 메소드 String getLabel() // 버튼위의 글자를 읽어온다. void setLabel(String label) // 버튼에 출력될 글자를 지정한다.
컴포넌트(버튼) • 버튼 생성 방법 Button() // 단순히 버튼 생성 Button(String) // 레이블을 주어 생성 • 버튼 만들어서 이벤트 연결하고 출력하는 예 Button b = new Button("확인"); b.addActionListener(this); add(b);
컴포넌트(레이블) • Label 클래스 • 다른 컴포넌트 위 또는 옆에 글자를 출력할때 사용 • Label 객체를 만들어 글자를 넣으면 됨 • Label 객체에는 이벤트 연결 필요 없음 • Label 클래스에 속한 메소드 String getText() // 레이블위의 글자를 읽어온다. void setText(String text) // 레이블에 글자를 작성한다. void setAlignment(int align) // 레이블 위 글자의 정렬상태를 지정
컴포넌트(레이블) • 필드에 레이블 붙이는 방법 • 레이블을 만들어 출력하는 예 public Label() { this("", LEFT); } public Label(String text) { this(text, LEFT); } public Label(String text, int alignment) Label.LEFT Label.RIGHT Label.CENTER Label grade = new Label (“2학년"); add(grade);
버튼과 레이블을 이용한 예제 해보기 클릭하면
[예제 버튼만들기] - ButtonEventsTest.java import java.applet.*; import java.awt.*; import java.awt.event.*; public class ButtonEventsTest extends Applet implements ActionListener { // ActionEvent를 사용하는 클래스를 작성 Label label1, label2; // Label 객체를 선언 public void init() { Button b1 = new Button("남자"); // 버튼 객체 생성 b1.addActionListener(this); // 생성된 버튼 객체에 ActionListener를 등록 add(b1); // 버튼 객체를 컨테이너 객체인 애플릿에 추가 Button b2 = new Button("여자"); b2.addActionListener(this); add(b2); label1 = new Label("당신의 성별은?"); add(label1); label2 = new Label(" "); add(label2); }
[예제 버튼만들기] (계속) public void actionPerformed(ActionEvent ae) { // 버튼이 눌려지면 수행될 이벤트 처리 메소드 작성 label2.setText(ae.getActionCommand()); // ActionEvent 클래스의 getActionCommand() 메소드를 // 이용하여 클릭된 버튼의 이름을 가져와 label2 객체의 // 텍스트로 나타낸다 } }
[예제 버튼 만들기 ]- ButtonEventsTest.html <html> <head><title>버튼 이벤트 처리</title></head> <body> <applet code="ButtonEventsTest" width=500 height=60> </applet> </body> </html>
버튼과 레이블을 이용한 예제2 해보기 클릭하면
예제 ButtonGandE.java import java.applet.*; import java.awt.*; import java.awt.event.*; public class ButtonGandE extends Applet implements ActionListener { Label label; String msg = ""; public void init() { Button b1 = new Button("봄"); b1.addActionListener(this); add(b1); Button b2 = new Button("여름"); b2.addActionListener(this); add(b2); Button b3 = new Button("가을"); b3.addActionListener(this); add(b3); Button b4 = new Button("겨울"); b4.addActionListener(this); add(b4); label = new Label(" "); add(label); }
예제 ButtonGandE.java 계속 public void actionPerformed(ActionEvent ae) { label.setText(ae.getActionCommand()); repaint(); } public void paint(Graphics g) { msg = "계절버튼을 눌러주세요 "; g.drawString(msg,1, 22); } }
ButtonGandE.html <html> <head><title>Button 생성과 이벤트 처리</title></head> <body> <applet code="ButtonGandE" width=450 height=60> </applet> </body> </html>
컴포넌트(체크박스) • Checkbox 클래스 • 주어진 항목들 중에서 여러 개를 선택할 수 있는 컴포넌트 • Checkbox의 한 항목 클릭시, ItemEvent이벤트 발생 • 체크박스 .vs. 라디오버튼 비교 • 체크박스 : 주어진 항목들 중에서 여러 개를 선택 • 라디오 버튼 : 오직 하나만 선택 가능 Checkbox() // 선택되지 않은 빈 체크박스 생성 Checkbox(String) // 주어진 문자열을 가진 체크박스 생성 Checkbox(String, null, boolean) // boolean값이 true이면 선택된 체크박스 생성
컴포넌트(체크박스) • Checkbox 클래스의 메소드 getLabel() : 체크박스의 레이블 값을 얻음 setLabel() : 체크박스에 레이블을 지정함 getState() : 체크박스가 선택되었는지 유무를 확인 setState() : 선택상태를 지정
컴포넌트(체크박스) • 체크박스 만들어서 이벤트연결하고 출력하는 예 Checkbox c1 = new Checkbox("딸기", null, true); Checkbox c2 = new Checkbox("사과"); Checkbox c3 = new Checkbox("수박", null, true); Checkbox c4 = new Checkbox("오렌지"); C1.addItemListener(this); C2.addItemListener(this); C3.addItemListener(this); C4.addItemListener(this); add(c1); add(c2); add(c3); add(c4);
컴포넌트(라디오 버튼) • CheckboxGroup 클래스 • 라디오 버튼 객체를 생성하기 위한 클래스 • CheckboxGroup의 객체를 생성한 후, 같은 그룹안에 넣을Checkbox 객체들을 만들어 체크박스그룹에 넣음 • 라디오버튼의 항목 클릭시, ItemEvent이벤트 발생 CheckboxGroup() ; // 라디오 버튼의 그룹을 형성 Checkbox(String, CheckboxGroup, boolean) // 라디오 버튼 그룹안에 버튼생성
컴포넌트(라디오 버튼) • 라디오버튼 만들어서 이벤트연결하고 출력하는 예 CheckboxGroupcbg= new CheckboxGroup(); Checkbox c1 = new Checkbox("사이다", cbg, false); Checkbox c2 = new Checkbox("콜라", cbg, true); Checkbox c3 = new Checkbox("오렌지쥬스", cbg, false); Checkbox c4 = new Checkbox("녹차", cbg, false); C1.addItemListener(this); C2.addItemListener(this); C3.addItemListener(this); C4.addItemListener(this); add(c1); add(c2); add(c3); add(c4); 해당항목의 초기 선택여부
[예제 라디오버튼 만들기-CheckBoxTest.java] • _________________________________________ • import java.applet.Applet; • import java.awt.*; • import java.awt.event.*; • public class CheckBoxTest extends Applet implements ItemListener { • Checkbox chk1, chk2, chk3, chk4; • String str; • public void init() { • CheckboxGroup cbg = new CheckboxGroup(); • chk1 = new Checkbox("사이다", cbg, false); • chk2 = new Checkbox("콜라", cbg, false); • chk3 = new Checkbox("오렌지쥬스", cbg, false); • chk4 = new Checkbox("녹차", cbg, false); • chk1.addItemListener(this); • chk2.addItemListener(this); • chk3.addItemListener(this); • chk4.addItemListener(this); • add(chk1); • add(chk2); • add(chk3); • add(chk4); • } • ____________________________________________________________________
[예제 라디오버튼 만들기] (계속) ____________________________________ • public void itemStateChanged(ItemEvent e) { • if(chk1.getState()) • str = chk1.getLabel(); • else if(chk2.getState()) • str = chk2.getLabel(); • else if(chk3.getState()) • str = chk3.getLabel(); • else if(chk4.getState()) • str = chk4.getLabel(); • else str = “잘 못 “; • str += “ 선택되었습니다.”; • repaint(); • } • public void paint(Graphics g) { • g.drawString(str, 20, 80); • } • } • _______________________________________________________________
[CheckBoxTest.html] ___________________________________ • <HTML> • <HEAD> • <TITLE> CheckBox Test </TITLE> • </HEAD> • <BODY> • <APPLET CODE=CheckBoxTest WIDTH=300 HEIGHT=100> • </APPLET> • </BODY> • </HTML> • ______________________________________________________________