Download presentation
Presentation is loading. Please wait.
Published byΑἴσων Σαμαράς Modified 6년 전
1
윤 홍 란 hryun@sookmyung.ac.kr
제3장 클래스와 객체의 사용-2 윤 홍 란
2
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지
3
출력 포맷(Formatting Output)
적절한 모양으로 출력 값을 포맷해야 한다. Java 표준 클래스 라이브리러 출력 포맷 기능을 제공하는 클래스 제공 java.text 패키지 NumberFormat 클래스 화폐 단위 , 퍼센트로 포맷 DecimalFormat 클래스 패턴을 기반으로 포맷
4
출력 포맷(Formatting Output)
NumberFormat 클래스의 정적 메쏘드 getCurrencyInstance() getPercentInstance() 포맷터(formatter) 객체 반환 포맷터(formatter) 객체의 메쏘드 format 적절한 포맷의 명시된 정보를 나타내는 스트링 반환
5
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;
6
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)); }
7
출력 포맷(Formatting Output)
DecimalFormat 클래스 부동소수점을 다양한 형식으로 포맷하는데 사용 예: 소수점 셋째 자리까지의 부동소수점 수 DecimalFormat의 구성자/메쏘드 DecimalFormat (String pattern) 구성자: 지정된 포맷 pattern을 가지는 새로운 DecimalFormat 객체를 생성한다. void applyPattern (String pattern) 이 DecimalFormat 객체에 지정된 pattern을 적용한다. String format (double number) 현재의 패턴에 따라서 포맷된, 지정된 number를 포함하고 있는 스트링을 반환한다.
8
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)); }
9
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지
10
열거 타입(Enumerated Type)
프로그래머가 열거 타입을 정의할 수 있다. 변수 선언에 사용할 수 있다. 열거 타입은 모든 가능한 값(식별자)을 나열한다. 나열된 값들의 수에 제한이 없음 예제 Season enum Season {winter, spring, summer, fall}; enum Grade {A, B, C, D, E, F};
11
열거 타입(Enumerated Type)
열거 타입이 정의되면 변수를 선언할 수 있다. Season time; 값을 배정할 수 있다. time = Season.fall; 값은 타입 이름을 통해 명시한다. 열거 타입은 타입-안전( type-safe ) 리스트 된 값 외에 값을 배정(사용) 할 수 없다.
12
순서 값(Ordinal Values) 내부적으로 열거 타입의 그러나 순서 값을 직접 배정할 수는 없음
열거 타입의 값은 순서 값(정수)으로 저장됨 열거 타입의 첫 번째 값은 순서 값 0 두번째 값은 1 … 그러나 순서 값을 직접 배정할 수는 없음
13
열거 타입(Enumerated Type)
열거 타입은 특별한 클래스 열거 타입 값은 객체 열거 타입의 변수는 객체 참조 변수 적용 가능 메쏘드 ordinal(): 열거 타입 값의 순서 값 name(): 열거 타입 값의 이름
14
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()); }
15
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지
16
포장 클래스(Wrapper Class) java.lang 패키지는 기본 타입에 대응되는 포장 클래스 제공 기본 타입
byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean void Void
17
포장 클래스(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
18
자동 박스(Autoboxing) 기본 타입 값을 상응하는 포장 객체로 자동 변환 Integer obj;
int num = 42; obj = int; 이 배정문은 자동으로 Integer 객체를 생성한다. 역변환 (unboxing)도 필요할 때 자동적으로 일어난다.
19
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지
20
그래픽 응용 지금까지 여기서는 텍스트 기반 명령어-줄 애플리케이션(command-line application)
그래픽 컴포넌트를 갖는 Java 애플리케이션 GUI(Graphical User Interface) 그래픽 사용자 인터페이스(GUI)는 사람과 컴퓨터간의 상호작용을 위한 사람-컴퓨터 인터페이스(HCI)중의 하나이다 GUI는 사용자가 컴퓨터 화면 상에 있는 객체들과 상호작용을 하는 인터페이스이다 오늘날 사실상 거의 모든 컴퓨터 플랫폼에서 GUI가 사용되고 있다
21
GUI GUI 프로그래밍 자바의 GUI 지원 도구 모음
입력은 마우스나 키보드를 통해 하고 출력은 화면을 통해 본다 이러한 프로그램을 작성하는 것이 GUI 프로그래밍이다 자바에서 GUI 프로그래밍을 지원하기 위해 모든 플랫폼에서 공통적으로 제공하는 최소한의 기능만을 지원하는 GUI 도구 모음을 제공한다 자바의 GUI 지원 도구 모음 GUI 응용을 지원하기 위한 클래스들은 주로 java.awt 패키지와 javax.swing 패키지에 있다 java.awt 패키지는 추상 윈도우 도구 모음(AWT)을 포함하는 최초의 자바 GUI 패키지이다 스윙 패키지는 AWT의 컴포넌트들보다 더 융통성이 있는 컴포넌트들을 포함한다 GUI 프로그램을 작성하기 위해서는 AWT 패키지와 스윙 패키지 둘 다 필요로 한다
22
GUI 컴포넌트(component) GUI 컴포넌트 GUI-관련 클래스 버튼, 텍스트 필드 같은 화면 요소를 나타내는 객체
java.awt: Abstract Windowing Toolkit (AWT) 원래 Java GUI 패키지 javax.swing 다양한 컴포넌트 추가
23
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
24
스윙 Swing is light-weight Component.
기존의 AWT가 기반운영시스템에서 Native code를 빌려서 GUI를 생성시킨 Peer 구조를 가진 반면에 Swing은 전체가 Java 코드로 작성되었기 때문에 운영시스템에 상관없이 동일한 인터페이스를 제공
25
스윙 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
26
스윙 스윙은 플랫폼 고유의 컴포넌트와 연계되지 않은 경량급의 빠른 컴포넌트들로 구성된 GUI 도구 모음이다
모든 새로운 스윙 컴포넌트들과 클래스들은 javax.swing 패키지에 정의되어 있다 스윙을 프로그램에서 사용하기 위해서는 다음과 같은 import 문을 사용해야 한다: import javax.swing.*;
27
스윙의 기본 구성 요소 컴포넌트: 정보를 화면에 보여 주거나 사용자가 프로그램과 어떤 방식으로 상호작용하게 하는 화면상의 요소이다 예: 단추, 레이블, 텍스트 필드 컨테이너: 다른 컴포넌트들을 포함하는 특별한 유형의 컴포넌트이다 예: 프레임, 패널 화면 구성 관리자(layout 관리자): 컨테이너 내에서 컴포넌트의 위치를 결정한다
28
GUI 컨테이너(Container) GUI 컨테이너 프레임(frame) 패널(panel)
다른 컴포넌트들을 포함하고 조직하는 데 사용되는 컴포넌트 프레임(frame) GUI-기반 Java 애플리케이션을 디스플레이 하는 데 사용 타이틀 바를 갖는 별개의 윈도우로 디스플레이 위치/크기 조정 가능 패널(panel) 다른 컴포넌트들을 포함하고 조직할 수 있으나 스스로 디스플레이 될 수 없다 ! 디스플레이 하려면 다른 컨테이너에 add 되어야 한다.
29
레이블(Label) 한 줄의 텍스트를 디스플레이 하는 GUI 컴포넌트 예제 Authority.java
정보를 디스플레이 혹은 다른 컴포넌트 식별하기 위해 예제 Authority.java 두 개의 레이블을 패널에 넣고 패널을 프레임에 디스플레이
30
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); } }
31
중첩 패널 포함 계층구조(containment hierarchy) 예제 NestedPanels.java
컨테이너가 다른 컴포넌트를 포함하여 계층구조 형성 원하는 가시적 효과를 내도록 형성 예제 NestedPanels.java 한 패널 내의 두 개의 패널 중첩 프레임 크기가 변함에 따른 효과 주의
32
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);
33
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); }
34
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지
35
이미지(Image) 이미지는 그래픽 인터페이스에 자주 사용 JPEG, GIF 포맷 이미지를 처리할 수 있다. JLabel
한 줄의 텍스트 디스플레이 하는데 사용 이미지 디스플레이 하는데 사용 레이블은 텍스트, 이미지, 둘 다로 구성 가능
36
이미지(Image) ImageIcon 클래스 레이블 내의 텍스트와 이미지 정렬 가능 예제 LabelDemo.java
레이블에 저장된 이미지를 나타내는데 사용 이미지에 대한 텍스트의 상대적 위치 설정 가능 레이블 내의 텍스트와 이미지 정렬 가능 예제 LabelDemo.java
37
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);
38
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); }
39
3장 요약 객체 생성 과 객체 참조 String 클래스와 그 메쏘드들 Java 표준 클래스 라이브러리
Random과 Math 클래스들 출력 포맷 열거 타입(enumerated type) 포장 클래스(wrapper class) 그래픽 컴포넌트와 컨테이너 레이블과 이미지
Similar presentations