Download presentation
Presentation is loading. Please wait.
Published by蜡 武 Modified 7년 전
0
JAVA 프로그래밍 7장 스윙 및 이벤트 처리
1
학습목표 이번장에서는 프로그램이 실행되는 환경이 다른 애플리케이션과 애플릿의 차이점을 학습하고, GUI 프로그램을 작성하기 위한 컴포넌트객체 생성과 배치 및 플랫폼(platform)에 따른 룩앤필(look and feel)에 대해서도 학습한다. 또한 컴포넌트에 어떤 동작(이벤트)이 발생하면 그 동작에 반응하여 처리되는 이벤트처리루틴(이벤트 핸들러)에 관계와 이벤트종류 및 리스너(listener)들에 대해서도 학습한다. 목차 Section1 스윙(Swing)의 개요 Section2 애플리케이션(Application) 과 애플릿(Applet) Section3 스윙(Swing) 컴포넌트 Section4 룩앤필 Section5 이벤트 와 이벤트처리의 개요 Section6 리스너와 이벤트 JAVA 프로그래밍
2
7장-스윙및 이벤트 처리 Section1 스윙(Swing)의 개요 스윙에 대한 기본작인 개요를 학습한다 .
Section2 애플리케이션(Application) 과 애플릿(Applet) 데스크탑 기반과 웹 기반의 프로그래밍의 차이를 학습한다. GUI프로그램을 작성하기 위한 스윙컴포넌트를 대해 학습한다. Section3 스윙(Swing) 컴포넌트 Section4 룩앤필 다중 상속을 위한 인터페이스에 대해 학습한다. 이벤트와 이벤트 처리에 대해 학습한다. Section5 이벤트 와 이벤트처리의 개요 이벤트와 그에 해당하는 리스너에 대해 학습한다. Section6 리스너와 이벤트 JAVA 프로그래밍
3
1. 스윙(Swing)의 개요 (1/3) 스윙의 개요
스윙(Swing)컴포넌트들은 100% 자바코드로 쓰여진 저중량 컴포넌트(lightweight componet)이기 때문에 플랫폼(plateform)의 GUI기능에 부담을 주지 않는다. 즉, 플랫폼에 독립적이다. 스윙(Swing)은 레이블, 텍스트필드등과 같은 단순한 컴포넌트에서부터 테이블, 트리등과 같은 복잡한 기능을 가진 컴포넌트들을 포함하고 있는 컴포넌트들의 집합체이다. 대부분의 스윙(Swing)컴포넌트JComponent클래스로부터 직접 상속을 받아서 만들어진 것들이다. JComponet클래스는 전혀 새로운 것이 아니라, AWT기반의 하나의 컴포넌트이다. JAVA 프로그래밍
4
1. 스윙(Swing)의 개요 (2/3) MVC(Model-View-Controller) (1/2)
MVC(Model-View-Controller) 구조는 전통적인 GUI기반의 어플리케이션을 구현하기 위한 디자인 패턴이다. MVC 구조는 사용자의 입력을 받아서, 그 입력 혹은 이벤트에 대한 처리를 하고, 그 결과를 다시 사용자에게 표시하기 위한 최적화된 설계를 제시한다. 뷰(View) 뷰(View)는 화면에 내용을 표출하는 역할을 담당 모델로부터 간접적인 메시지를 받거나 컨트롤러로부터 받은 메시지를 화면상에 표출하는 역할을 담당한다. JAVA 프로그래밍
5
1. 스윙(Swing)의 개요 (3/3) MVC(Model-View-Controller) (2/2) 모델(Model)
모델(Model)은 로직을 가지는 부분으로 DB와의 연동을 통해서 데이터를 가져와 어떤 작업을 처리하거나, 처리한 작업의 결과를 데이터로서 DB에 저장하는 일을 처리한다. 데이터를 생성하고 저장하고 처리하는 역할만을 담당한다. 따라서 모델은 컴포넌트 상태의 모든 정보값을 유지하는 역활을 한다. 컨트롤러(Controller) 컨트롤러(Controller)는 어플리케이션의 흐름을 제어하는 것으로 뷰(View)와 모델(Model)사이에서 이들의 흐름을 제어한다. 즉, 컨트롤러는 컴포넌트가 사용될 때의 동작을 수행하는것을 담당하고, 어떤 동작이 수행될지를 결정해야 한다. JAVA 프로그래밍
6
2. 애플리케이션 과 애플릿 (1/14) 자바에서 프로그램을 작성할 때는 크게 두개의 영역인 애플리케이션 프로그램과 웹브라우져(web Browser) 기반의 애플릿 프로그램으로 나뉘어서 작성된다. 애플리케이션 프로그램을 작성할 때는 컨테이너(container)를 Frame(AWT) 혹은 JFrame(Swing)을 쓰고, 애플릿 프로그램을 작성할 때는 컨테이너(container)를 Applet(AWT) 혹은 JApplet(Swing)을 쓴다. JAVA 프로그래밍
7
2. 애플리케이션 과 애플릿 (2/14) 컨테이너란 GUI프로그램을 작성할 때 컴포넌트들을 담는 장소로, 컨테이너를 컴포넌트의 모임이라 하기도 한다. 컨테이너가 될 수 있는 것은 프레임(Frame, JFrame), 애플릿(Applet, JApplet), 패널(Panel, JPanel)뿐이다. JFrame과 JApplet은 최종 컨테이너로 사용되고, JPanel 컴포넌트는 중간 컨테이너로 사용된다. 클래스째 컨테이너에 추가해야 할 경우에는JPanel을 패널(Panel, JPanel)을 사용한다. JAVA 프로그래밍
8
2. 애플리케이션 과 애플릿 (3/14) 프레임(JFrame)
JFrame을 사용하려면 javax.swing패키지를 import 받아야한다. 프레임은 컨테이너의 일종으로 컴포넌트를 담는 역할을 하며, 일종의 윈도우로 타이틀 바를 가지고 있다. 프레임은 애플리케이션 프로그램을 작성할 때 쓴다. main()메소드를 가지고 있다는 것이다. 프로그램의 시작이 main()메소드로부터 시작한다. main()메소드를 가지므로 객체를 생성할때 사용되는 생성자를 사용해야한다. 생성자에서 컴포넌트의 객체의 생성과 배치를 할 때 사용된다. JFrame은 4개의 생성자를 제공하나, 주로 많이 사용되는 형태는 매개변수 없는 JFrame()형태이다. JFrame() : 타이틀이 없는 보이지 않는 새로운 프레임을 생성한다. JAVA 프로그래밍
9
2. 애플리케이션 과 애플릿 (4/14) 애플릿(JApplet)
JApplet을 작성하려면 javax.swing.*패키지를 import 받아야한다. 자바 애플릿은 웹브라우저를 기반으로 수행된다. 자바의 애플리케이션이 main()메소드로부터 시작되는 것에 반해, 애플릿은 init()메소드로부터 시작된다 JAVA 프로그래밍
10
3. 스윙(Swing) 컴포넌트 (1/14) 스윙(Swing) 컴포넌트를 사용하려면 javax.swing패키지를 import받아야 한다. 스윙(Swing) 컴포넌트들은 여러 패키지에 나누어져 있다. 자주 사용하는 스윙(Swing)패키지 스윙(Swing) 패키지명 하는일 javax.swing 스윙(Swing)에서 가장 기본적이 패키지로대부분의 스윙(Swing)컴포넌트들이 이패키지에 속한다. javax.swing.border 다양한 보더(border)(테두리 선)의 사용을 위한 패키지이다. javax.colorchooser 색을 선택하기 위한 컴포넌트인 JColorChooser를 지원하기위한 패키지이다. javax.swing.event 스윙(Swing)에서 추가되는 이벤트처리를 위한 패키지이다. javax.swing.filechooser 파일을 선택하기 위한 컴포넌트인 JFileChooser를 지원하는 패키지이다. javax.swing.table JTable컴포넌트를 지원하는 패키지이다. javax.swing.tree JTree컴포넌트를 지원하는 패키지이다. JAVA 프로그래밍
11
3. 스윙(Swing) 컴포넌트 (2/14) JAVA 프로그래밍
12
3. 스윙(Swing) 컴포넌트 (3/14) JFrame이나 JApplet은 JRootPane이라는 단지 한 개의 자식 컴포넌트만 가질 수 있다 여러개의 컴포넌트를 추가시킬 때는 JRootPane에 추가시켜야 한다. Container c = getContentPane();//Container 객체를 리턴 c가 그것을 받는다. c.add(label1); // add()메소드를 사용해서 추가한다. JAVA 프로그래밍
13
3. 스윙(Swing) 컴포넌트 (4/14) JLabel JButton JTextField
GUI 프로그램에 대한 정보 또는 텍스트를 생성하기위한 레이블을 생성하는 컴포넌트이다. JLabel jl = new JLabel("연습"); JButton 버튼을 생성하는 컴포넌트이다 JButton jb = new JButton ("버튼"); JTextField JTextField는 문자열을 입력할 수 있는 컴포넌트이다. JTextField jb = new JTextField (); JAVA 프로그래밍
14
3. 스윙(Swing) 컴포넌트 (5/14) JPasswordField JTextArea
JPasswordField jb = new JPasswordField (); JTextArea JTextArea는 여러 줄의 문자열을 표시할 수 있는 컴포넌트이다. 스윙 컴포넌트인 JTextArea는 자동으로 스크롤바가 생기지 않는다. 스크롤바를 붙일 때는 JScrollPane클래스 객체를 사용해서 스크롤바를 붙여준다. JTextArea content = new JTextArea(3,20); JAVA 프로그래밍
15
3. 스윙(Swing) 컴포넌트 (6/14) 레이아웃 매니져 I (Layout Manager I) (1/2)
복잡한 형태의 컴포넌트는 중간컨테이너인 JPanel을 사용하면 해결한다. 컴포넌트를 어떤 형태로 부착 시킬 것인가는 레이아웃 매니저를 사용해서 처리한다. 플로우 레이아웃(FlowLayout) 플로우 레이아웃은 컨테이너에 컴포넌트를 차례로 왼쪽에서 오른쪽으로 추가시킨다. 한 줄에 표시하기에 컴포넌트가 많으면 자연스럽게 다음 줄에 추가된다. 플로우 레이아웃은 기본적으로 컨테이너가 중앙정렬 된다. 컨테이너중 AWT의 Applet과 , Panel과 스윙의 JPanel의 기본 레이아웃 매니저는 FlowLayout이다. JAVA 프로그래밍
16
3. 스윙(Swing) 컴포넌트 (7/14) 레이아웃 매니져 I (Layout Manager I) (2/2)
보더 레이아웃(BorderLayout) 보더 레이아웃은 컨테이너에 컴포넌트를 부착시킬 위치가 이미 정해져 있는것으로 East/West/South/North/Center 이 다섯 부분에만 컴포넌트가 부착될 수 있다. JFrame과 JApplet의 기본 레이아웃 매니저는 BorderLayout이다. 그리드 레이아웃(GridLayout) 그리드 레이아웃은 컨테이너가 일률적으로 정해진 같은 크기로 컴포넌트를 추가시킨다. 행렬의 형태를 가지며, 왼쪽부터 열의 개수만큼 컴포넌트가 추가되며, 한행이 모두 추가되면 다음 행의 에 추가된다. JAVA 프로그래밍
17
3. 스윙(Swing) 컴포넌트 (8/14) JCheckBox JRadioButton
라디오버튼은 JRadioButton 클래스를 사용해서 객체를 생성한다. JRadioButton은 ButtonGroup을 이용해서 논리적 그룹화를 해야 한다. JCheckBox c1 = new JCheckBox( "잠자기" ); JCheckBox c2 = new JCheckBox( "TV시청" ); JCheckBox c3 = new JCheckBox( "만화보기" ); JRadioButton r1 = new JRadioButton( "남자" ,true); JRadioButton r2 = new JRadioButton( "여자" ,false); ButtonGroup bg = new ButtonGroup(); bg.add(r1); bg.add(r2); JAVA 프로그래밍
18
3. 스윙(Swing) 컴포넌트 (9/14) JList 레이아웃 매니저 II (Layout Manager II)
JList는 리스트박스를 생성하는 컴포넌트로, setVisibleRowCount(5)를 사용해서 표시하고 싶은 리스트의 개수를 표시한다. 단일 선택 또는 복수 선택은 setSelectionMode()메소드를 사용해서 한다. JList jl = new JList(sports); 레이아웃 매니저 II (Layout Manager II) 카드 레이아웃(CardLayout) 카드 레이아웃(CardLayout)은 컴포넌트들을 카드를 여러장이 겹쳐있는 형태 배치한다. 각각의 카드에는 하나의 컴포넌트만을 넣을 수 있다. JAVA 프로그래밍
19
3. 스윙(Swing) 컴포넌트 (10/14) 박스 레이아웃(BoxLayout)
컴포넌트들이 왼쪽에서 오른쪽으로 수평 배치되거나, 위에서 아래로 수직 배치가 되도록 해주는 레이아웃관리자다. 박스 레이아웃은 컴포넌트들 간에 수직 혹은 수평공간을 확보하기 위해 Strut 과 Glue를 제공한다. Strut은 컴포넌트가 부착되어있는 컨테이너의 크기가 변하더라도 절대 크기가 변하지 않고, Glue는 변한다. Strut 과 Glue는 일종의 투명컴포넌트로서 자리만 차지하고, 보이지는 않는다 JAVA 프로그래밍
20
3. 스윙(Swing) 컴포넌트 (11/14) 메뉴사용하기(JMenuBar, JMenu, JMenuItem)
메뉴(Menu)는 setMenuBar()메소드를 제공하는 컨테이너의 객체에만 사용할 수 있는데, 이것이 가능한 컨테이너는 최종 컨테이너로 사용되는 JFrame 과 JApplet이다. 메뉴를 정의해서 사용하기 위해서는 4단계의 과정이 필요하다. 1단계JMenuBar생성해서, 3단계에서 생성한 JMenu를 JMenuBar에 추가시킨다. JMenuBar bar = new JMenuBar(); 2단계 setJMenuBar() 사용해서 컨테이너에서 메뉴바를 사용할 수 있게한다. setJMenuBar( bar ); JAVA 프로그래밍
21
3. 스윙(Swing) 컴포넌트 (12/14) 팝업메뉴(JPopupMenu)
3단계 JMenu생성해서 유사한JMenuItem 그룹을 관리한다. JMenu fileMenu = new JMenu( "파일" ); 4단계 JMenuItem , JCheckBoxMenuItem 혹은 JRadioButtonMenuItem등의 가장 하위단계의 메뉴의 항목을 생성한다. JMenuItem newItem = new JMenuItem( "새파일" ); 팝업메뉴(JPopupMenu) JPopupMenu는 GUI프로그램에서 제공되는 팝업메뉴를 생성한다. 팝업메뉴는 오른쪽 마우스버튼을 누르거나(mousePressed) 해제(mouseReleased)될 때 수행된다. PopupMenu popupMenu = new JPopupMenu(); JAVA 프로그래밍
22
3. 스윙(Swing) 컴포넌트 (13/14) 인터널 프레임(JInternalFrame)
GUI프로그램에서는 보다 발전된 형태의 GUI를 제공하기위에서는 부모 윈도우안에 별도의 자식윈도우를 갖는MDI(Multiple Data Interface)를 사용한다. 자바에서는 JInternalFrame을 제공한다. JInternalFrame은 혼자 동작할 수 없고 반드시 JDesktopPane에 JInternalFrame을 추가시켜야 자식 프레임인 JInternalFrame이 일반프레임처럼 작동된다. 1. JDesktopPane클래스의 객체를 생성한다. JDesktopPane desktop = new JDesktopPane(); 2. JInternalFrame클래스의 객체생성한다. JInternalFrame inframe = new JInternalFrame("내부프레임", true, true, true, true); 3. JDesktopPane클래스의 객체에 JInternalFrame클래스의 객체를 추가한다. desktop.add(inframe); JAVA 프로그래밍
23
3. 스윙(Swing) 컴포넌트 (14/14) 테이블(JTable) 탭팬(JTabbedPane)
JTable클래스는 Table형태로 자료를 표현하고자 할 때 사용된다. JTable table = new JTable(data, title); 탭팬(JTabbedPane) 탭(Tab)을 자바에서 제공하는 것이 JTabbedPane 컴포넌트이다. JTabbedPane은 객체를 생성할 때 탭의 위치를 JTabbedPane.TOP , JTabbedPane.BOTTOM, JTabbedPane.LEFT, JTabbedPane.RIGHT로 지정할 수 있다. JTabbedPane tab = new JTabbedPane(JTabbedPane.TOP); JAVA 프로그래밍
24
4. 룩앤필 (1/1) 룩앤필(Look-and-Feel)이란 GUI프로그램의 컴포넌트들이 프로그램이 수행되는 해당 플랫폼에 따라 그 모양이 약간씩 다르게 보이는 것을 말한다. 기존의 AWT에서는 룩앤필을 무시했었다. 그결과로 여러 가지 기능성문제가 발생하여서 Swing에서는 플랫폼에 따른 룩앤필(Look-and-Feel)을 정의 가능하도록 해서 이런 문제를 제거하였다. JAVA 프로그래밍
25
5. 이벤트 와 이벤트처리의 개요(1/2) 이벤트 이벤트 핸들러
버튼을 누르거나, 키를 입력하거나, 마우스를 클릭하는 것 등의 동작이다. 이벤트 핸들러 이벤트가 발생하면 발생된 이벤트에 반응하여 어떤 처리를 하는 메소드이다. 이벤트의 동작에 응답하는 방식으로 처리되는 프로그램을 이벤트 드리븐 (Event-driven) 프로그램이라 한다. 이벤트 드리븐 프로그램은 일종의 무한 루프 프로그램이 이벤트의 동작이 언제 들어오던지 처리해주는 방식으로 프로그램을 처리된다. JAVA 프로그래밍
26
5. 이벤트 와 이벤트처리의 개요(2/2) 이벤트 드리븐 프로그램의 요소 이벤트 드리븐 프로그램요소의 내용 이벤트
마우스버튼을 누르는 것, ꎠ키를 치는 것, 창을 닫는 것 등등 이벤트 핸들러 이벤트가 발생했을 때 그것을 처리하는 로직. 함수 또는 메소드라 불리운다. JAVA 프로그래밍
27
6. 리스너와 이벤트 (1/3) 리스너(Listener) (1/2)
리스너(Listener)는 인터페이스(interface)이다. 따라서 리스너안에 정의되어있는 메소드는 해당 리스너를 임플리먼츠(implements)하는 곳에서 반드시 오버라이딩 해줘야한다. 리스너는 이벤트와 이벤트핸들러 사이를 연결시켜주는 역할을 한다. 이벤트가 발생한 해당 컴포넌드를 리스너에 등록시켜야 해당이벤트가 제공하는 이벤트 핸들러로 프로그램 제어가 옮겨진다. 자바에서 이벤트 핸들러는 메소드로 표현된다. 즉, 이벤트를 처리하는 메소드이다. 자바에서 이벤트를 처리하는 메소드의 리턴타입은 언제나 void 이다. JAVA 프로그래밍
28
6. 리스너와 이벤트 (2/3) 리스너(Listener) (2/2)
이벤트와 이벤트 리스너의 관계는 예를 들어 설명하자만 ActionEvent는 ActionListener에 등록해서 사용해야 한다. 리스터를 등록할 때는 addActionListener()를 사용한다. 즉, XxxEvent 는 XxxListener에 addXxxListener()메소드를 이용해서 등록한다. JAVA 프로그래밍
29
6. 리스너와 이벤트 (3/3) 이벤트(Event) 자주 사용되는 이벤트와 해당이벤트를 부여할 수 있는 컴포넌트 이벤트명
해당컴포넌트 ActionEvent JButton, JTextField, JCheckBox, JComboBox, JFileChooser JMemuItem, JRadioButton ItemEvent JButton, JCheckBox, JComboBox, JMemuItem, JRadioButton MouseEvent JFrame , JPanel WindowEvent JFrame ListSelectionEvent JList, JTable KeyEvent JTextField ChangeEvent JSlider JAVA 프로그래밍
Similar presentations