윤 홍 란 hryun@sookmyung.ac.kr 제3장 클래스와 객체의 사용-2 윤 홍 란 hryun@sookmyung.ac.kr.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
프로그래밍 개론 Ⅰ 제 3장. 클래스와 객체의 사용 ①.
제3장 클래스와 객체의 사용.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Power Java 제3장 이클립스 사용하기.
4강. Servlet 맛보기 Servlet 문서 작성 하기 web.xml에 서블릿 맵핑 어노테이션을 이용한 서블릿 맵핑
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
최윤정 Java 프로그래밍 클래스 상속 최윤정
7장 배열 ②.
컴퓨터 프로그래밍 실습 #7 제 4 장 GUI 클래스 작성.
GUI 환경에서 작동하는 프로그램에 대하여 윈도우 프로그램의 작성 방법 그래픽과 이미지 디스플레이 방법 오디오 파일 재생 방법
명품 JAVA Programming.
4장 자바 기본 구조 4.1 자바 응용 프로그램 분석 4.2 자바 애플릿 프로그램 분석
제 9 장 구조체와 공용체.
윤 홍 란 제3장 클래스와 객체의 사용-1 윤 홍 란
Kim heesang JDBC Programming 2 Kim heesang
제 4 장 클래스 작성 Lab 4- 2.
어서와 Java는 처음이지! 제8장 그래픽 사용자 인터페이스.
7장 배열 ②.
19장 스윙과 이벤트 처리 Section 1 스윙 컴포넌트 Section 2 이미지 아이콘과 라벨
프로그래밍 개론 Ⅰ 제 3장. 클래스와 객체의 사용 ②.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 6. 형변환.
5장 조건과 반복 ③.
명품 Java Programming.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
5장 조건과 반복 ①.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Power Java 제14장 배치 관리자.
그래픽 사용자 인터페이스와 사건처리.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
공학컴퓨터프로그래밍 Python 염익준 교수.
자바 5.0 프로그래밍.
CHAP 12. 리소스와 보안.
C#.
[INA470] Java Programming Youn-Hee Han
제2장 데이터 및 수식.
10장 tkinter로 GUI 만들기.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
30강 JAVA 그래픽 JAVA GUI(Graphic User Interface)란? AWT 컴포넌트? Swing 컴포넌트?
제3장 클래스와 객체의 사용.
CHAP 5. 레이아웃.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
2장. 변수와 타입.
Clipping 이진학.
자바 5.0 프로그래밍.
5장 조건과 반복 ①.
JA A V W. 06.
Mariadb JDBC PROGRAMMING2
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
제 4 장 클래스 작성 Lab 4- 2.
Outline 클래스의 해부 캡슐화(Encapsulation) 메쏘드의 해부 그래픽 객체(Graphical Objects)
윤 홍 란 4 장 클래스 작성 윤 홍 란
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Chapter 4 클래스 작성.
9 브라우저 객체 모델.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
Power Java 제14장 배치 관리자.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
 6장. SQL 쿼리.
7 생성자 함수.
Presentation transcript:

윤 홍 란 hryun@sookmyung.ac.kr 제3장 클래스와 객체의 사용-2 윤 홍 란 hryun@sookmyung.ac.kr

Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지

출력 포맷(Formatting Output) 적절한 모양으로 출력 값을 포맷해야 한다. Java 표준 클래스 라이브리러 출력 포맷 기능을 제공하는 클래스 제공 java.text 패키지 NumberFormat 클래스 화폐 단위 , 퍼센트로 포맷 DecimalFormat 클래스 패턴을 기반으로 포맷

출력 포맷(Formatting Output) NumberFormat 클래스의 정적 메쏘드 getCurrencyInstance() getPercentInstance() 포맷터(formatter) 객체 반환 포맷터(formatter) 객체의 메쏘드 format 적절한 포맷의 명시된 정보를 나타내는 스트링 반환

Purchase.java //출력을 포맷하는데 NumberFormat 클래스 사용을 보여준다. import java.util.Scanner; import java.text.NumberFormat; public class Purchase { public static void main (String[] args) { final double TAX_RATE = 0.06; // 6% sales tax int quantity; double subtotal, tax, totalCost, unitPrice; Scanner scan = new Scanner (System.in); NumberFormat fmt1 = NumberFormat.getCurrencyInstance(); NumberFormat fmt2 = NumberFormat.getPercentInstance(); System.out.print ("Enter the quantity: "); quantity = scan.nextInt(); System.out.print ("Enter the unit price: "); unitPrice = scan.nextDouble(); subtotal = quantity * unitPrice; tax = subtotal * TAX_RATE; totalCost = subtotal + tax;

Purchase.java // Print output with appropriate formatting System.out.println ("Subtotal: " + fmt1.format(subtotal)); System.out.println ("Tax: " + fmt1.format(tax) + " at " + fmt2.format(TAX_RATE)); System.out.println ("Total: " + fmt1.format(totalCost)); }

출력 포맷(Formatting Output) DecimalFormat 클래스 부동소수점을 다양한 형식으로 포맷하는데 사용 예: 소수점 셋째 자리까지의 부동소수점 수 DecimalFormat의 구성자/메쏘드 DecimalFormat (String pattern) 구성자: 지정된 포맷 pattern을 가지는 새로운 DecimalFormat 객체를 생성한다. void applyPattern (String pattern) 이 DecimalFormat 객체에 지정된 pattern을 적용한다. String format (double number) 현재의 패턴에 따라서 포맷된, 지정된 number를 포함하고 있는 스트링을 반환한다.

CircleStats.java(원의 면적과 둘레구하기) // DecimalFormat 클래스를 사용하여 십진수 값을 포맷하는 것을 보여준다. import java.util.Scanner; import java.text.DecimalFormat; public class CircleStats { public static void main (String[] args) { int radius; double area, circumference; Scanner scan = new Scanner (System.in); System.out.print ("Enter the circle's radius: "); radius = scan.nextInt(); area = Math.PI * Math.pow(radius, 2); circumference = 2 * Math.PI * radius; // Round the output to three decimal places DecimalFormat fmt = new DecimalFormat ("0.###"); System.out.println ("The circle's area: " + fmt.format(area)); System.out.println ("The circle's circumference: " + fmt.format(circumference)); }

Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지

열거 타입(Enumerated Type) 프로그래머가 열거 타입을 정의할 수 있다. 변수 선언에 사용할 수 있다. 열거 타입은 모든 가능한 값(식별자)을 나열한다. 나열된 값들의 수에 제한이 없음 예제 Season enum Season {winter, spring, summer, fall}; enum Grade {A, B, C, D, E, F};

열거 타입(Enumerated Type) 열거 타입이 정의되면 변수를 선언할 수 있다. Season time; 값을 배정할 수 있다. time = Season.fall; 값은 타입 이름을 통해 명시한다. 열거 타입은 타입-안전( type-safe ) 리스트 된 값 외에 값을 배정(사용) 할 수 없다.

순서 값(Ordinal Values) 내부적으로 열거 타입의 그러나 순서 값을 직접 배정할 수는 없음 열거 타입의 값은 순서 값(정수)으로 저장됨 열거 타입의 첫 번째 값은 순서 값 0 두번째 값은 1 … 그러나 순서 값을 직접 배정할 수는 없음

열거 타입(Enumerated Type) 열거 타입은 특별한 클래스 열거 타입 값은 객체 열거 타입의 변수는 객체 참조 변수 적용 가능 메쏘드 ordinal(): 열거 타입 값의 순서 값 name(): 열거 타입 값의 이름

IceCream.java public class IceCream { enum Flavor {vanilla, chocolate, strawberry, fudgeRipple, coffee, rockyRoad, mintChocolateChip, cookieDough} public static void main (String[] args) { Flavor cone1, cone2, cone3; cone1 = Flavor.rockyRoad; cone2 = Flavor.chocolate; System.out.println ("cone1 value: " + cone1); System.out.println ("cone1 ordinal: " + cone1.ordinal()); System.out.println ("cone1 name: " + cone1.name()); System.out.println (“\ncone2 value: " + cone2); System.out.println ("cone2 ordinal: " + cone2.ordinal()); System.out.println ("cone2 name: " + cone2.name()); cone3 = cone1; System.out.println (“\ncone3 value: " + cone3); System.out.println ("cone3 ordinal: " + cone3.ordinal()); System.out.println ("cone3 name: " + cone3.name()); }

Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지

포장 클래스(Wrapper Class) java.lang 패키지는 기본 타입에 대응되는 포장 클래스 제공 기본 타입 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean void Void

포장 클래스(Wrapper Class) 정수 40을 나타내는 Integer 객체 생성 Integer age = new Integer(40); 객체가 필요한 곳에 사용될 수 있다. 포장 클래스가 제공하는 상수/메쏘드 String 형태의 정수를 int 값으로 변환 num = Integer.parseInt(str); 정수를 이진수 스트링으로 변환 String toBinaryString (int num) Integer. MIN_VALUE, Integer. MAX_VALUE

자동 박스(Autoboxing) 기본 타입 값을 상응하는 포장 객체로 자동 변환 Integer obj; int num = 42; obj = int; 이 배정문은 자동으로 Integer 객체를 생성한다. 역변환 (unboxing)도 필요할 때 자동적으로 일어난다.

Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지

그래픽 응용 지금까지 여기서는 텍스트 기반 명령어-줄 애플리케이션(command-line application) 그래픽 컴포넌트를 갖는 Java 애플리케이션 GUI(Graphical User Interface) 그래픽 사용자 인터페이스(GUI)는 사람과 컴퓨터간의 상호작용을 위한 사람-컴퓨터 인터페이스(HCI)중의 하나이다 GUI는 사용자가 컴퓨터 화면 상에 있는 객체들과 상호작용을 하는 인터페이스이다 오늘날 사실상 거의 모든 컴퓨터 플랫폼에서 GUI가 사용되고 있다

GUI GUI 프로그래밍 자바의 GUI 지원 도구 모음 입력은 마우스나 키보드를 통해 하고 출력은 화면을 통해 본다 이러한 프로그램을 작성하는 것이 GUI 프로그래밍이다 자바에서 GUI 프로그래밍을 지원하기 위해 모든 플랫폼에서 공통적으로 제공하는 최소한의 기능만을 지원하는 GUI 도구 모음을 제공한다 자바의 GUI 지원 도구 모음 GUI 응용을 지원하기 위한 클래스들은 주로 java.awt 패키지와 javax.swing 패키지에 있다 java.awt 패키지는 추상 윈도우 도구 모음(AWT)을 포함하는 최초의 자바 GUI 패키지이다 스윙 패키지는 AWT의 컴포넌트들보다 더 융통성이 있는 컴포넌트들을 포함한다 GUI 프로그램을 작성하기 위해서는 AWT 패키지와 스윙 패키지 둘 다 필요로 한다

GUI 컴포넌트(component) GUI 컴포넌트 GUI-관련 클래스 버튼, 텍스트 필드 같은 화면 요소를 나타내는 객체 java.awt: Abstract Windowing Toolkit (AWT) 원래 Java GUI 패키지 javax.swing 다양한 컴포넌트 추가

javax.swing.JComponent AWT vs. Swing 초기 자바에서는 그래픽을 위해 java.awt package의 Abstract Windowing Toolkit (AWT)에 정의되어 있는 graphic class 들을 사용했다. AWT가 플랫폼에 따라 다른 모양, 다른 동작 내부는 플랫폼에 고유한 코드로 구성됨. Java 2 에서는 AWT components을 확장하여 Swing class를 소개했다. 플랫폼에 기반한 애플리케이션 (같은 모양) 100% 자바로 이루어짐. 기존의 AWT 컴포넌트의 새로운 버전 제공 (확장) 예) AWT Button class  Swing Jbutton class AWT TextArea class  Swing JTextArea class 보통 앞에 J 자가 붙음 AWT를 대치하는 것은 아님. java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent

스윙 Swing is light-weight Component. 기존의 AWT가 기반운영시스템에서 Native code를 빌려서 GUI를 생성시킨 Peer 구조를 가진 반면에 Swing은 전체가 Java 코드로 작성되었기 때문에 운영시스템에 상관없이 동일한 인터페이스를 제공

스윙 Swing container JFrame, JDialog, JWindow, JApplet, JInternalFrame Add()로 무작정 컴포넌트 추가하면 안됨. contentPane를 구한 후, 해당 contentPane에 추가 및 배치해야 함. // getContentPane()을 이용해 ContentPane을 구한다. Container contentPane = getContentPane(); // 컴포넌트의 배치와 추가를 한다. contentPane.setLlayout(new BorderLayout()); contentPane.add(button, “Center”); Swing JApplet class Swing JFrame class content pane

스윙 스윙은 플랫폼 고유의 컴포넌트와 연계되지 않은 경량급의 빠른 컴포넌트들로 구성된 GUI 도구 모음이다 모든 새로운 스윙 컴포넌트들과 클래스들은 javax.swing 패키지에 정의되어 있다 스윙을 프로그램에서 사용하기 위해서는 다음과 같은 import 문을 사용해야 한다: import javax.swing.*;

스윙의 기본 구성 요소 컴포넌트: 정보를 화면에 보여 주거나 사용자가 프로그램과 어떤 방식으로 상호작용하게 하는 화면상의 요소이다 예: 단추, 레이블, 텍스트 필드 컨테이너: 다른 컴포넌트들을 포함하는 특별한 유형의 컴포넌트이다 예: 프레임, 패널 화면 구성 관리자(layout 관리자): 컨테이너 내에서 컴포넌트의 위치를 결정한다

GUI 컨테이너(Container) GUI 컨테이너 프레임(frame) 패널(panel) 다른 컴포넌트들을 포함하고 조직하는 데 사용되는 컴포넌트 프레임(frame) GUI-기반 Java 애플리케이션을 디스플레이 하는 데 사용 타이틀 바를 갖는 별개의 윈도우로 디스플레이 위치/크기 조정 가능 패널(panel) 다른 컴포넌트들을 포함하고 조직할 수 있으나 스스로 디스플레이 될 수 없다 ! 디스플레이 하려면 다른 컨테이너에 add 되어야 한다.

레이블(Label) 한 줄의 텍스트를 디스플레이 하는 GUI 컴포넌트 예제 Authority.java 정보를 디스플레이 혹은 다른 컴포넌트 식별하기 위해 예제 Authority.java 두 개의 레이블을 패널에 넣고 패널을 프레임에 디스플레이

Authority.java import java.awt.*; import javax.swing.*; public class Authority {    public static void main (String[] args)    { JFrame frame = new JFrame ("Authority");       frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);       JPanel primary = new JPanel();       primary.setBackground (Color.yellow);       primary.setPreferredSize (new Dimension(250, 75));       JLabel label1 = new JLabel ("Question authority,");       JLabel label2 = new JLabel ("but raise your hand first.");       primary.add (label1);       primary.add (label2);       frame.getContentPane().add(primary);       frame.pack();       frame.setVisible(true);    } }

중첩 패널 포함 계층구조(containment hierarchy) 예제 NestedPanels.java 컨테이너가 다른 컴포넌트를 포함하여 계층구조 형성 원하는 가시적 효과를 내도록 형성 예제 NestedPanels.java 한 패널 내의 두 개의 패널 중첩 프레임 크기가 변함에 따른 효과 주의

NestedPanel.java import java.awt.*; import javax.swing.*; public class NestedPanels { public static void main (String[] args) JFrame frame = new JFrame ("Nested Panels"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); // Set up first subpanel JPanel subPanel1 = new JPanel(); subPanel1.setPreferredSize (new Dimension(150, 100)); subPanel1.setBackground (Color.green); JLabel label1 = new JLabel ("One"); subPanel1.add (label1);

NestedPanel.java // Set up second subpanel JPanel subPanel2 = new JPanel(); subPanel2.setPreferredSize (new Dimension(150, 100)); subPanel2.setBackground (Color.red); JLabel label2 = new JLabel ("Two"); subPanel2.add (label2); // Set up primary panel JPanel primary = new JPanel(); primary.setBackground (Color.blue); primary.add (subPanel1); primary.add (subPanel2); frame.getContentPane().add(primary); frame.pack(); frame.setVisible(true); }

Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지

이미지(Image) 이미지는 그래픽 인터페이스에 자주 사용 JPEG, GIF 포맷 이미지를 처리할 수 있다. JLabel 한 줄의 텍스트 디스플레이 하는데 사용 이미지 디스플레이 하는데 사용 레이블은 텍스트, 이미지, 둘 다로 구성 가능

이미지(Image) ImageIcon 클래스 레이블 내의 텍스트와 이미지 정렬 가능 예제 LabelDemo.java 레이블에 저장된 이미지를 나타내는데 사용 이미지에 대한 텍스트의 상대적 위치 설정 가능 레이블 내의 텍스트와 이미지 정렬 가능 예제 LabelDemo.java

LabelDemo.java import java.awt.*; import javax.swing.*; public class LabelDemo { public static void main (String[] args) JFrame frame = new JFrame ("Label Demo"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); ImageIcon icon = new ImageIcon ("devil.gif"); JLabel label1, label2, label3; label1 = new JLabel ("Devil Left", icon, SwingConstants.CENTER); label2 = new JLabel ("Devil Right", icon, SwingConstants.CENTER); label2.setHorizontalTextPosition (SwingConstants.LEFT); label2.setVerticalTextPosition (SwingConstants.BOTTOM); label3 = new JLabel ("Devil Above", icon, SwingConstants.CENTER); label3.setHorizontalTextPosition (SwingConstants.CENTER); label3.setVerticalTextPosition (SwingConstants.BOTTOM);

LabelDemo.java JPanel panel = new JPanel(); panel.setBackground (Color.cyan); panel.setPreferredSize (new Dimension (200, 250)); panel.add (label1); panel.add (label2); panel.add (label3); frame.getContentPane().add(panel); frame.pack(); frame.setVisible(true); }

3장 요약 객체 생성 과 객체 참조 String 클래스와 그 메쏘드들 Java 표준 클래스 라이브러리 Random과 Math 클래스들 출력 포맷 열거 타입(enumerated type) 포장 클래스(wrapper class) 그래픽 컴포넌트와 컨테이너 레이블과 이미지