1. JAVA의 첫걸음
Java 종류와 그 공통점과 차이점 | |||||
|
종 류 |
특 성 | |||
JAVA |
Java Script |
*Script Language |
Compile(X) |
WebBrowser *탐재 *해석 *실행 |
WebBrowser기능향상 WebBrowser Control |
Java Applet |
Appletviewer로 전용 테스팅 |
*Compile(O) *같은 Class를 사용 |
멀티미디어적이고 동적인 홈페이지 제작 | ||
Java Application |
Java 해석기로 실행 |
독립실행프로그램 |
독립적인 플랫폼독립적인 프로그램 개발 |
1. Java는 객체지향형 프로그래밍 ( OOP )
a 다른 프로그램 언어와 달리 만들어질 때부터 OOP 프로그램으로 개발
2. Java는 플랫폼 독립적이다.--기존의 프로그램 언어와 달리 운영체제에 관계없이 동작한다.
a Java Code가 Compile되면 ByteCode로 변화
a 각 시스템에 탐재된 자바해석기 ( Java 가상기계 ( JVM ) )에 의해 동작
3. Java는 이식성이 우수하다.
4. Java는 동적 / 분산적이다.--동적
a 프로그램이 실행하고 있는 중에 동적으로 Class를 탐재, 실현시킬 수 있다. 분산적
a 다양한 고급 네트웍킹을 지원.
a Java의 Internet Programming언어의 입지를 굳힌다.
a 필요한 부분을 Internet Program 실행 중에 네트위크 상으로 다운로드 받아 실행
5. 단순성
a 프로그램은 배우기가 쉽다. ( 만들 때부터 쉽도록 제작 ) java는 C 언어와 달리 Pointer가 없다.자동으로 사용하지 않는 메모리 제거
a Garbage Collection Memory 관리가 쉬워짐.
a 사용하지 않는 객체를 가비지로 간주하여 시스템의 유지기에 가비지를 모아서 자동으로 삭제함. ( Garbage Collector )
6. 견고성 - java는 신뢰성이 높은 , 즉 견고한 소프트웨어를 작성하도록 제작
일부분의 다른 언어의 버그를 자동으로 해결예외 상황 처리에 대한 보강이 잘 되어 있다.
7. 보안성
a 자신의 사용 메모리 이외의 메모리에 접근하지 못한다. (메모리에 대한 직접적 접근을 방지 )
a 자바해석기가 신뢰성이 확보되지 않은 코드를 탐재할 때 항상 바이트 코드를 검사함
a 모래상자 모델( Sand Box Model ) a 신용이 확인되지 않은 코드는 자바환경전체에 아무런 해약이 미치지 못하는 '모래상자'에 의치 시킨다.
a Local System에 대한 전면적인 접근을 금지.
a 디지털 시그너쳐 ( 전자사인 ) 을 사용.
8. 고성능 a 네이티브 ( native ) 코드 사용
9. 멀티 스레드 a java는 멀티 스레드 프로그래밍 언어( 다중작업 언어 )
a java.lang.Thread Class : Thread의 시작 / 정지 / 우선권 지정
a Animation 프로그램제작 코드는 거의 Thread를 사용
2. Java 프로그래밍 환경 구축
1. http://java.sun.com/products/로 접속하여 jdk를 다운로드 한다.
▶ 화일다운로드 살펴보기
2. 설치프로그램으로 JDK가 설치된다. -- C디렉토리 아래 JDK가 설치됨
3. Autoexec.bat파일을 편집 -- Path Line에 C:\JDK1.2.1\bin을 삽입한다.
4. Editor선택 -- 설치 (UltraEdit-32 ).
1. 7BIN디렉토리 --프로그램제작에 필요한 실행 파일들이 모여있음.
java.exe |
자바 컴파일러 |
appletviewer.exe |
applet프로그램 테스트기 |
java.exe |
자바 인터프리터(해석기 application 프로그램 동작기) |
javadoc.exe |
자바 문서 생성기 a자바 소스 코드에서 문서를 HTML로 만들어 낸다 |
2. 'LIB디렉토리--Class들을 모아두는 Library 디렉토리
'classes.zip, tclasses.zip : 자바는 일반프로그램들과는 달리 클래스들을 압축하여 그 용량을 줄이고 있다. 자바 예약어 중에 import를 사용하여 필요한 클래스만을 축출하여 사용하는 특성을 가지고 있다.
3. DEMO디렉토리 -- 애플릿 프로그램의 예제들을 모아두어 애플릿을 짜는 사람들에게 도움을 주는 디렉토리.
Java에서 사용하는 예약어들
** Java Compiler가 예약을하고사용하는 단어이기 때문에 사용자 정의로 선언해서는 안 되는 단어들이다.
**Java는 아직도 개발이 완전히 끝난 프로그램 언어가 아닌 관계로 미리 정의되어 있는 '예 약 어'들이 눈에 띈다.
|
|
‘abstract |
추상적인 Method 나 Class를 정의한다. |
‘boolean |
boolean형(1비트) |
‘break |
루프나 switch명령문의 프로세싱을 료한다 (분리한다. ) |
‘byte |
8bit ( 1byte ) 정수형 자료형 |
‘case |
Swich 명령문 내에서 선택 사항을 지시한다. |
‘catch |
예외 상황을 트랩한다. |
‘class |
클래스형의 정의한다. |
‘const |
미래의 사용을 위해 예약되어 있다.( 현재 Java에서는 사용되지 않음 ) |
‘continue |
다음 반복을 사용하여 루프의 실행을 계속한다. |
‘default |
다른 경우가 일치하지 않을 때 switch명령문 내의 디폴트 선택 사항을 지시한다. |
‘do |
do / while루프를 시작한다. |
‘double |
8byte 실수형 자료형 |
‘else |
if 명령문의 대안 절을 지정한다. |
‘extends |
코드가 정의하고 있는 클래스의 모 클래스를 정의한다 |
‘final |
변수가 상수이며, 클래스가 서브 클래스가 될 수 없으며, 메소드가 오버라이드될 수 없음을 지정한다. |
‘finally |
Java가 항상 실행하는 try 블록의 일부를 지정한다. |
‘float |
4byte 실수형 자료형 |
‘for |
for ( 연속적인 ) 루프를 시작한다. |
‘future |
미래의 사용을 위해 예약되어 있다.( 현재 Java에서는 사용되지 않음 ) |
‘generic |
미래의 사용을 위해 예약되어 있다.( 현재 Java에서는 사용되지 않음 ) |
‘goto |
미래의 사용을 위해 예약되어 있다.( 현재 Java에서는 사용되지 않음 ) |
‘if |
조건 명령문을 지정한다. |
‘implements |
클래스가 명령된 인터페이스나 인터페이스들을 구현한다 ( 인터페이스의 메소드를 정의한다.) |
‘import |
프로그램이 사용하는 패키지( 클래스 라이브러리 )를 식별한다. |
‘inner |
미래의 사용을 위해 예약되어 있다.( 현재 Java에서는 사용되지 않음 ) |
‘instanceof |
지정된 객체가 클래스와 인스턴스일 경우 true를 리턴한다. 연산자 취급 |
‘int |
4byte의 정수형 자료형 |
' interface |
클래스가 구현할 수 있는 Method로 추상적인 유형을 정의한다. |
‘long |
8byte 정수형 자료형. |
‘native |
Method가 C 내의 어디에선가 또는 플랫폼에 의존하는 다른 언어에서 구현되었음을 지정한다. |
‘new |
새 객체나 배열을 할당한다. |
‘null |
임의 객체를 참조하지 않는 변수( C에서처럼 0과 동일한 것으로 간주하지 않음 )를 지정한다. |
‘operator |
미래의 사용을 위해 예약되어 있다.( 현재 Java에서는 사용되지 않음 ) |
‘outer |
미래의 사용을 위해 예약되어 있다.( 현재 Java에서는 사용되지 않음 ) |
‘package |
클래스 컬렉션( 라이브러리 ) |
‘private |
이 클래스의 멤버만이 객체에 Access할 수 있음을 지시하는 수정자 |
‘protected |
이 클래스, 서브 클래스, 그 외에 패키지 내에서만이 객체에 Access할 수 있음을 지시하는 수정자 |
‘public |
모든 클래스의 Method가 객체에 Access할 수 있음을 지시하는 수정자 |
‘rest |
미래의 사용을 위해 예약되어 있다.( 현재 Java에서는 사용되지 않음 ) |
‘return |
함수로부터 제어를 호출기로 리턴한다. |
‘short |
2byte 정수형 자료형 |
‘static |
클래스의 객체가 아닌 클래스에게 객체의 고유성을 지시해 주는 수정자 |
‘super |
슈퍼 클래스 객체나 구성자를 참조한다. |
‘switch |
하나 이상의 case명령문과 함께 사용되어 추가 명령문을 작성한다. |
‘synchronized |
클래스나 코드의 한 섹션을 잠궈 Thread에 의한 동시적인 수정을 예방한다. |
‘this |
현재의 객체의 인스턴스를 참소한다. |
‘throw |
프로그램에게 예외 상황이 일어났다는 신호를 지시해 준다. |
‘throws |
Method가 던질 수 있는( throw ) 예외 상황을 나열한다. |
‘transient |
미래의 사용을 위해 예약되어 있다.( 현재 Java에서는 사용되지 않음 ) |
‘try |
예외 상황을 트랩하는 코드 블록을 지정한다. |
‘var |
미래의 사용을 위해 예약되어 있다.( 현재 Java에서는 사용되지 않음 ) |
‘void |
메소드가 값을 리턴하지 않음을 지정한다. |
‘volatile |
변수가 비동기적으로 변화므로 컴파일러가 변수 사용의 최적화를 시도해선 안됨을 지정한다. |
‘while |
while루프의 시작을 지정한다. |
4. APPLET TAG에 대하여
* HTML의 Applet 명령은 HTML문서에 JAVA 애플릿을 탑재하는 역할을 수행한다.
* APPLET 태그는 또한 HTML문서와 JAVA APPLET과의 DATA교환을 가능케 한다.
의 완전한 문법>
| 옵션의 이름 | 옵션의 기능 설명 |
Applet tag에 들어가는 옵션들 |
’codebase = “codebaseURL” | 선택적인 옵션으로서 애플릿의 베이스 URL을 명시한다. 설정되지 않으면 HTML문서의 URL을 명시한다. |
‘ code = “applet file” | 필수 옵션으로서 Applet의 컴파일된 Applet class파일을 지정한다. | |
‘ width = 폭 픽셀 ‘ height = 높이 픽셀 | 필수 옵션, 애플릿 표시 영역에 대한 초기 폭, 높이 픽셀 값을 정한다. 애플릿이 생성하는 창이나 다이알로그는 치지 않는다. | |
‘ alt = 다른 텍스트 | 선택적 옵션, browser가 APPLET TAG는 인식하지만 어떤 이유에서든지 applet이 실행되지 않을 때, 표시하는 문자열. | |
‘ name = applet instance 이름 | 선택적 옵션, 같은 페이지에 있는 애플릿들이 서로 교신하기 위행 사용하는 애플릿 인스턴스의 이름을 정한다. | |
‘ align = 정렬방식 | 선택적 옵션. Applet의 정렬방식을 설정한다. IMG TAG에서의 정렬방식과 동일하다. | |
‘ vspace = 픽셀 ‘ hspace = 픽셀 | 선택적 옵션 applet의 위 아래, 양 옆의 공간을 정한다 | |
‘ name = applet 속성1 ‘ value = 값 |
애플릿 마다의 속성을 정할 때. 사용한다. 애플릿은 이 값을 getParmeter() method로 읽어들인다. | |
|
|
5. Java 코딩 맛보기
**Java 코딩 편집기 선택
    ASCII편집기(UltraEdit, 메모장,
도스 편집기, 위드페드, 일반 위드 등등)라면 무엇이든 가능
**예제 1>applet
맛보기
1. 아래 코딩을 저장 시 반드시 파일의 이름을 최상위 클래스의 이름과 동일해야 한다.( HelloWorld.java)
     
2. javac는 파일이름의
클래스 코드를 찾아 컴파일함.
** javac ( 자바 컴파일러
)에 의해 HelloWorld.class로 만듦 --HTML문서에 탐재
**Java는 대/소문자를 철저히 구분하는
언어이다.
**Java의 import keyword는 package(클래스 라이브러리 군)의 경로명을 연결하는 예약어
**Java의
기본 Package 들 ( JDK1.0.2기준 )
java.lang |
java program의 필수적인 Class군 | 기본 package로 import하지 않아도 컴파일러가 자동으로 import시킴 |
java.io | java 입출력에 관계하는 Class군 | |
java.applet | Java applet program과 관계하는 Class군 | |
java.awt |
window형태에 관계하는 또는 멀티미디어에 관계하는 Class군 | |
java.net |
Java Networking에 관련된 Class군 | |
java.util |
java프로그램에서 유용하게 쓰이는 기타의 Class군 | |
java.awt.image |
java의 image processing에 관련된 Class군 | |
java.awt.peer | 기계 종속적인 윈도 시스템을 기계 독립적인 윈도 시스템과 연결해주는 Class군 |
**Command(주석표시)
-----Compiler가 주석 표시된 부분은 처리하지
않음
-----// : 행 주석 a 한행을 주석 표시
-----/*……….*/ : 여러 라인 주석 표시 --사이에 있는 모든 내용을
주석으로 처리
-----/** …… */ : 특수 주석 표시 -- 기능은 위의 것과 동일
특수 기능--javadoc.exe에 의해
도움말 HTML문서를 자동으로 작성
3. Java Applet은
반드시 HTML문서 위에 실어야 하므로 HTML 문서를 작성해야 한다.
4. 테스트는 'appletviewer HelloWorld.html' 또는 Web Browser로
한다.
**예제2>application
맛보기
1. Edit 프로그램에서 아래와 같이 작성한후 ExApp.java로 저장한다.
 
2. 작성된코드를 컴파일 시킨다.
    javac ExApp.java
3. ExApp.class가 생기면 자바 인터프리터를 이용해
자바 어플리케이션을 동작시킨다.
    java ExApp
 
** Java Application에는 반드시
main() method가 있어야 한다. Application은 독립적으로 수행되는 Java Program을 만들기 때문에 '프로그램의 시작과
흐름 그리고 끝을 관리하는 Method가 반드시 필요한 것이다.
** Java는 메모리 상에 문자열의 끝으로 표시되는 '\0'표시가
사용하지 않기 때문에 문자열을 만나면 내부적으로 String 자료형을 만들어 처리한다.
** System.out.println()
Method는 C언어의 printf()함수와 동일하게 콘솔창에 명령을 출력한다.
6. 변수 & 상수 & 자료형        
기본 자료형
데이터 형 설 명 크 기 byte 정 수 1byte stort 정 수 2byte int 정 수 4byte long 정 수 8byte float 실수(단정도) 4byte double 실수(배정도) 8byte char 문자(유니코드) 2byte boolean true 또는 false 1bit
레퍼런스 자료형(참조 자료형)
Class
배열(Array)
interface
C언어에서 사용되는 '구조체' 나 '공용체'는 사용되지 않는다.
7. 연산자
---연산, 계산을 하는 심벌이다.
이름 | 연 산 자 |
산술 연산자 | + - * / % |
부호 연산자 | + - |
증감 연산자 | ++ - - |
비교 연산자 | < <= > >= == != |
논리 연산자 | && || ! |
대입 연산자 | = += -= *= /= %= &= |= ^= <<= >>= >>>= |
조건 연산자 | ? : |
비트 연산자 | >> >>> << & | ~ |
그 밖의 연산자 | (type) new [ ] . (param) instanceof |
[ ] . (PARAM) expr++ expr--
높음
우
선
순
위
낮음
++expr --expr +expr -expr ~ ! new (type) * / % + - << >> < > <= >== instanceof == != & ^ | && || ?: = += -= *= /= %= ^= &= |= <<= >>= >>>=
피연산자 1 연산자 피연산자 2 결과값 true && true true true && false false false && true false false && false false
피연산자 1 연산자 피연산자 2 결과값 true || true true true || false true false || true true false || false false
피연산자 연산자 결과값 true ! false false ! true
연산자 내 용 피연산자 개수 >> 오른쪽으로 비트단위로 이동 2개 >>> 오른쪽으로 비트단위로 이동 ( Unsigned ) 2개 << 왼쪽으로 비트단위로 이동 2개 & 비트 AND 2개 | 비트 OR 2개 ^ 비트 XOR 2개 ~ 비트 NOT 1개
연 산 왼쪽 피연산자의 이진수 표기 결과값
(이진수)결과값
(십진수)10<<1 0000 1010 0001 0100 20 10>>1 0000 1010 0000 0101 5 10>>>1 0000 1010 0000 0101 5 -10<<1 1111 0110 1110 1100 -20 -10>>1 1111 0110 1111 1011 -5 -10>>>1 1111 0110 0111 1011 2147483643
예제 Shift연산자 Application
(Shift.java)
-----------------------------------------------------------------------------------------------
class
Shift
{
         public static void main(String arg[])
         {
                  int x, Result;
                  x = 10;
                  System.out.println('x: ' + x + ' , (Binary : 0000 0000 0000
0000 0000 0000 0000 1010)\n');
                  Result = x >> 1;
                  System.out.println('x >> 1 : ' + Result +' , (Binary :
0000 0000 0000 0000 0000 0000 0000 0101)');
                  x = 10;
                  Result = x >>> 1;
                  System.out.println('x >>>1 : ' + Result +' , (Binary
: 0000 0000 0000 0000 0000 0000 0000 0101)');
                  x = 10;
                  Result = x << 1;
                  System.out.println('x <<1 : ' + Result +' , (Binary :
0000 0000 0000 0000 0000 0000 0001 0100)\n');
                  x = -10;
                  System.out.println('x :1 : ' + x +' , (Binary :1111 1111
1111 1111 1111 1111 1111 0110)\n');
                  Result = x >> 1;
                  System.out.println('x >> 1 : ' + Result +' , (Binary :
1111 1111 1111 1111 1111 1111 1111 1011)');
                  x = -10;
                  Result = x >>> 1;
                  System.out.println('x >>> 1 : ' + Result +' , (Binary
: 0111 1111 1111 1111 1111 1111 1111 1011)');
                  x = -10;
                  Result = x << 1;
                  System.out.println('x << 1 : ' + Result +' , (Binary :
1111 1111 1111 1111 1111 1111 1111 1100)');
         }
}
------------------------------------------------------------------------------------------------
피연산자 1 연산자 피연산자 2 결과값 1 & 1 1 1 & 0 0 0 & 1 0 0 & 0 0
피연산자 1 연산자 피연산자 2 결과값 1 | 1 1 1 | 0 1 0 | 1 1 0 | 0 0
피연산자 1 연산자 피연산자 2 결과값 1 ^ 1 0 1 ^ 0 1 0 ^ 1 1 0 ^ 0 0
피연산자 연산자 결과값 1 ~ 0 0 ~ 1
13 & 12 13 | 12 13 ^ 12 1101 1100
----------
1100
1101 1100
-----------
1101
1101 1100
-----------
0001
8.
제어문         
---프로그램의 흐름을 제어하는 문법
---조건문, 반복문 등이 있다.
종 류 문법 구조 if 문 if ( 연산식 또는 조건식 )
{ 수행하고자 하는 문장; ………… }if ( 연산식 또는 조건식 )
{ 수행하고자 하는 문장; ………… }
else
{ 수행하고자 하는 문장; ………… }if ( 연산식1 또는 조건식 )
{ 수행하고자 하는 문장; ………… }
else if( 연산식2 )
{ 수행하고자 하는 문장; ………… }
else
{ 수행하고자 하는 문장; ………… }조건 연산자의 이용 조건식 ?참일 경우의 결과값 : 거짓일 경우의 결과값 switch 문 switch (테스트할 연산식 )
{
case 첫번째 값: 수행하고자 하는 문장들 ; break;
case 두 번째 값:수행하고자 하는 문장들; break;
………….;
default:수행하고자 하는 문장들;break;
}
달의 날수를 구하는 예제
--------------------------------------------------------------------------------------
class Month
{
         public static void main(String arg[])
         {
                  int month, num_of_day;
                  month = 5;
                  if ((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12))
                  {
                           num_of_day = 31;
                  }
                  else if ( (month == 4) || (month == 6) || (month == 9) || (month == 11))
                  {
                           num_of_day = 30;
                  }
                  else if ( month == 2 )
                  {
                           num_of_day = 28;
                  }
                  else
                  num_of_day = -1;
                  System.out.println('Month : ' + month + ' , Day : ' + num_of_day);
         }
}
--------------------------------------------------------------------------------------
날짜를 구하는 프로그램
--------------------------------------------------------------------------------------
class Month2
{
        public static void main(String arg[])
        {
                int month, num_of_day;
                month = 5;
                switch (month)
                {
                        case 1:
                        case 3:
                        case 5:
                        case 7:
                        case 8:
                        case 10:
                        case 12: num_of_day = 31; break;
                        case 4:
                        case 6:
                        case 9:
                        case 11: num_of_day = 30; break;
                        case 2: num_of_day = 28; break;
                        default : num_of_day = -1;
                }
                System.out.println('Month : ' + month + ' , Day : ' + num_of_day);
        }
}
--------------------------------------------------------------------------------------
국어점수 등급 출력 프로그램(Score.java)
--------------------------------------------------------------------------------------
class Score
{
       public static void main(String arg[])
       {
              int kok_jum;
              char grade;
              kok_jum = 88;
              switch(kok_jum/10)
              {
                     case 10: case 9: grade = 'A'; break;
                     case 8: grade = 'B'; break;
                     case 7: grade = 'C'; break;
                     case 6: grade = 'D'; break;
                     case 5: case 4: case 3:case 2: case 1:case 0: grade = 'F'; break;
                     default : grade = 'X'; break;
              }
       System.out.println('KOK : ' + kok_jum + ' , Grade : ' + grade);
       }
}
--------------------------------------------------------------------------------------
종 류 | 문법 구조 |
for 문 | for( 초기화; 조건식; 증감식 ) { 반복하고자 하는 문장들; } |
while 문 | while ( 조건식 ) { 반복하고자 하는 문장들; } |
do … while 문 | do { 반복하고자 하는 문장들; } while ( 조건식 ) |
9.Point/Dimention/Graphics에 대하여
이 Class.는 2차원 점의 X좌표와 Y좌표를 홀드한다.
java.awt Package에 포함되어있음.
public class Point extends Object implements Serializable
생성자
public Point ( );
public Point ( Point p );
public Point ( int x, int y );
멤버 변수
public int x;
public int y;
멤버 Method
public Point getLocation ( );
public void move ( ); //좌표를 정함
public void translate ( int x, int y ); //지정된 값을 좌표에 추가한다.
public void setLocation ( Point p );
public void setLocation ( int x, int y );
10.Font/Color
class에 대하여
Font Class를 이용한 예제 ( Font_test.java )
import java.applet.*; import java.awt.*; public class Font_test extends Applet { Font f1 = new Font('Helvetica', Font.PLAIN, 18); Font f2 = new Font('Helvetica', Font.BOLD, 10); Font f3 = new Font('Helvetica', Font.ITALIC, 12); Font f4 = new Font('Courier', Font.PLAIN, 12); Font f5 = new Font('TimesRoman', Font.BOLD + Font.ITALIC, 14); Font f6 = new Font('Dialog', Font.ITALIC, 14); public void paint(Graphics g) { g.setFont(f1); g.drawString('18pt Plain Helvetica', 5, 20); g.setFont(f2); g.drawString('10pt Bold Helvetica', 5, 43); g.setFont(f3); g.drawString('12pt Italic Helvetica', 5, 58); g.setFont(f4); g.drawString('12pt Plain Courier', 5, 75); g.setFont(f5); g.drawString('14pt Bold & Italic TimesRoman', 5, 92); g.setFont(f6); g.drawString('14pt Italic Dialog', 5, 111); } } |
1. java.awt package 속에 정의되어 있으며 색상에 관리하는 필요한 정보를 정의하고 있는 Class이다..
2. 생성자
public Color(int r, int g, int b);
public Color(int rgb);
public Color(float r, float g, float b);
** 프로그램에서 색은 삼원색을 혼합하여 사용( red, green, blue)
3. 미리 정의되어 있는 색깔 ( 상수( final ) 선언되어있어 Class의 속에 있는 것을 그대로 사용)
사용 가능한 색상
'black 'blue 'cyan 'darkGray 'gray
green 'lightGray 'magenta 'orange 'pink
'red 'white 'yellow
** 사용 방식 Color.색상 이름
4.프로그램에서 색상의 설정
Graphics Class의 멤버 method를 사용
***setColor( 색상변수 )
예제> HelloColor.java :애플릿 상에서 색상을 가진 그래픽을 표현해 보고자 한다. 문자열을 출력하고 색상을 지정한 원과 선을 그린다. |
|
download HelloColor.zip |
import
java.awt.*; import java.applet.*; public class HelloColor extends Applet {     public void paint (Graphics g)     {     g.drawString('Hellow world!', 32, 50);     //문자열을 지정한 위치 (32, 50) 에 위치시켜 출력한다.     g.setColor(Color.red);     //앞으로 정의할 색상 즉 여기서는 빨강색으로 그리라는 의미이다.     g.drawOval(25,5,75,75);     //원을 그리는 작업으로 좌표값(25,5)에서 높이 75 폭 75의 원을 그리라는 의미이다.     g.drawLine(36,68,88,16);     //화면상에 좌표값(36,68)에서 시작해 좌표값(88,16)에 선을 그리게 된다...     } } |
학습 point 1. 그래픽 더블 버퍼링 |
첫 번째 라인의
import java.awt.*; 은 C나 C++의 include문와 유사한 동작을 한다 즉 java.awt.Graphics라는 클래스를
프로그램에서 사용하겠다는 의미이다. . 기본적으로 자바 언어로 만든 그래픽 응용프로그램은 이미지 처리시 더블 버퍼링을 사용해야 한다. 그래픽컨텍스드는 시스템이 어떻게 그래프를 그릴 것인가 알려주는 테이타구조라 할수 있으며 대표적인 것으로는 paint() Method이다.     public void paint (Graphics g){............ 여기서 g는그래픽 컨텍스트로서 g안에 있는 화면사의 이미지를 변화시킨다. 즉 이 클래스는 paint(...)메쏘드에서 매개변수 Graphics 객체인 g를 넘겨줌으로써, 메쏘드내에서 drawRect(....)과 drawString(....)을 사용가능하게 한다. 그럼 메쏘드 앞에 쓰여진 g. 는 무엇인가? 이것은 Graphics객체로 g라는 것을 만들어 매개 변수로 사용함 일컫는 것으로, paint(..)메쏘드는 위와같이 Graphics 객체를 매개 변수로 필요로 합니다. 따라서 Graphic 객체 g의 메쏘드로 drawRect(...) 과 drawString(...)을 사용함을 의미하는 것입니다 paint(...) 메쏘드는 애플렛이 오버라이드할 수 있는 두가지의 화면출력 메쏘드들중 하나이다. ◎ paint(...) : 기본적인 화면출력 메쏘드이고, 대부분의 메쏘드들은 브로우져 페이지에 애플렛을 표현하기 위해서 이 메쏘드를 사용한다. 다른 하나는, ◎ update(...) : 그리기 작업을 갱신내기 개선하기위해 paint(...) 다음에 사용할 수 있는 메쏘드이다. paint(...) 와 update(...) 메쏘드는 Applet 클래스로부터 상속을 받습니다. 그리고 Applet 클래스는 이 메쏘드들을 Component 클래스로부터 상속받는다.즉, paint(...), update(...) 는 Component 클래스내에 있다.두 메쏘드는 Graphics 객체를 매개변수로 받아 화면출력을 하게끔 합니다. 그리고 화면출력의 모양은 paint(...) 메쏘드내에 쓰면 된다. |
학습 point 2. 자바 언어에서 그래픽그리기 |
어떤 애플릿이 화면상에서 어떠한 것을 그리고자 한다면 그 Graphics class는 자바언어의 패키지인 java.awt에 속한 것이다. 이를위해 반드시 그 클래스를 인포트 해야만 오류가 없이 컴파일이 수행된다. |
줄그리기......
    g.drawLine(36,68,88,16); .... |
사각형그리기.... |
원형그리기....     g.drawOval(10,10,30,30);...좌표값(10,10)에서 폭30 높이 30인 원을 그린다.     g.fillOval(10,10,50,30);..좌표값(10,10)에서 폭50 높이 30인 타원을 그린다. 호 그리기     g.drawArc(10,10,30,30,0,110);...좌표값(10,10)에서 폭30 높이 30인 시작각도가 0이고, 110도 지점까지 호를 그린다.     g.fillArc(10,10,30,30,0,-110);                            |
예제> colorLines.java 애플릿이 실행되면 색상을 달리하는 여러개의 줄을 그려본다. . |
download colorLines.zip |
import
java.awt.*; import java.applet.*; public class colorLines extends Applet {     public void paint (Graphics g)    {         int count;         //count로 정수형 변수를 선언한수 3으로 나눈 나머지의 값에 따라 색깔을 부여 하였다.         for(count=0; count<=12; count++)         {              switch(count%3)              {                  case 0: g.setColor(Color.blue);break;                  case 1: g.setColor(Color.red);break;                  case 2: g.setColor(Color.green);break;             }             g.drawLine(10, count*10, 80, count*10);         }    } } |
학습 point... Color class |
색상을 관리하는데 필요한 정보를 정의하고 있는
class이다. public Color(int r, int g, int b); public Color(int rgb); public Color(floatr, float g, float b); |
|
-
getRed(): return a value between 0 and 255 representing the red content - getGreen() - getBlue() - getColor(): return Color object representing the current color for the graphics context - setColor(Color c)                           |
예제3> D_applet2.java 폰트의 크기를 변경시켜 표현해본다. . |
download D_applet2.zip |
import
java.awt.*; import java.applet.*;        public class D_applet2 extends Applet {       String data='HelloJava';       Font f;       public void init()       {             resize(300,300);             this.setBackground(Color.blue);             f=new Font('TimesRoman', Font.BOLD+Font.ITALIC,45);       }       public void paint(Graphics g)       {             g.setColor(Color.red);             g.fillOval(0,0,300,300);             g.setColor(Color.yellow);             g.setFont(f);             g.drawString(data,50,130);       } } |
학습 point... 글자와 서체 |
public Font(String name,int style, int size); |
String name--글꼴양식 int style--미리정의된 font style로 final로 상수화 되어
있다. |
시스템에서 사용가능한 font의 리스트를 알아내는 방법       - Toolkit class에서 제공하는 String[] getFontList()를 이용한다 예] public void paint(Graphics g) {       String fonts[] = Toolkit.getDefaultToolkit().getFontList();             for(int j = 0; j < fonts.length; j++)                   g.drawString(fonts[j], 10, j*10 + 120); }                         |
예제> gugu2.java level class를 활용 구구단을 출력해 본다. . |
import
java.awt.*; import java.applet.*;      public class gugu2 extends Applet {       Label gu_label;       public void init()       {             resize(600,300);             gu_label = new Label('GuGuDan', CENTER);             gu_label.setFont(new Font('TimesRoman',Font.BOLD,30));             add(gu_label);       }       public void paint(Graphics g)       {             for(int i=2;i<=9;i++)             {                   for(int j=1;j<=9;j++)                   {                         g.drawString(i+' * ' + j + '=' + i * j, i*50, 50+j*20);                         //y축의 간격은 20, x축의 간격을 50으로 한다.                   }             }       } } |
학습 point.. Lavel class ** String Class와는 기능적면에서 다르다. ** 독립적인 Class로 제목적인 의미로 사용하는 객체. |
생성자 public Label ( ); public Label ( String text ); public Label ( String text, int alignment ); |
|
예제3> Parameter.java 자바 애플릿을 만든 사람은 정확한 운영을 위한 매개변수를 알고 있지만, 다른사람들은 정확히 알지 못할 수 있으므로 매개변수에 대한 정보를 전달하는 것이 필요하다. 이것을 통해 자바애플릿을 위한 HTML화일에 문자 정보로 출력 될 수 있게 정의할수 있다. |
download
Parameter.zip |
import
java.applet.*; import java.awt.*; public class Parameter extends Applet {     String toDisplay;     int speed;     public void init()     {         resize(100,100);         String pv=getParameter('speed');         if(pv==null)         { speed=10; }         else         { speed=Integer.parseInt(pv); }         toDisplay='Speed given:'+speed;         }     public void paint(Graphics g)     {         g.drawString(toDisplay,25,25);     } } |
|
예제> bar_chart.java . |
|
import java.awt.*; import java.applet.*;      public class bar_chart extends Applet {      static int data_set[] = {0, 0, 0, 0};       // HTML문서에서 받아 들일 data의 초기값 지정      final static String data_label[] = {'국어', '산수' ,'바른 생활', '자연' };      int Graph_offset = 20;      int Graph_Height = 150;      int Y_Tick_Height = Graph_Height / 5;      int Graph_Width = 240;      int X_Tick_Width = Graph_Width / data_set.length;      public void init()      {           resize(400, 300);           setBackground(Color.white);           String str;           str = getParameter('0'); //애플릿 클래스에 정의 리턴값으로 String           data_set[0] = Integer.valueOf(str, 10).intValue(); //valueOf           //intValue           str = getParameter('1');           data_set[1] = Integer.parseInt(str); //parseInt           str = getParameter('2');           data_set[2] = Integer.parseInt(str);           str = getParameter('3');           data_set[3] = Integer.parseInt(str);     }      public void paint (Graphics g)      {           g.setColor(Color.black);           //X축을 그린다.           g.drawLine(Graph_offset + Graph_Width, Graph_offset,           Graph_offset + Graph_Width, Graph_offset + Graph_Height);           //X-점 레이블을 그린다.           for(int i = 0; i <= 5; i++)           {                g.drawString(String.valueOf(i*20), Graph_offset + Graph_Width + 10,                Graph_offset + Graph_Height - (i * Y_Tick_Height));                //모는 선을 그린다.                g.drawLine(Graph_offset,                     Graph_offset + Graph_Height - (i * Y_Tick_Height),                     Graph_offset + Graph_Width + 5,                     Graph_offset + Graph_Height - (i * Y_Tick_Height));           }           //X축을 그린다.           g.drawLine(Graph_offset, Graph_offset + Graph_Height,           Graph_offset + Graph_Width, Graph_offset + Graph_Height);           //X-점 레이블을 그린다.           for(int i = 0; i < data_set.length; i++)           {                g.drawString(data_label[i],                     Graph_offset + X_Tick_Width * i + X_Tick_Width / 4,                     Graph_offset + Graph_Height + 20);                //X-점 선을 그린다.                g.drawLine(Graph_offset + X_Tick_Width * i + X_Tick_Width / 2,                Graph_offset + Graph_Height,                Graph_offset + X_Tick_Width * i + X_Tick_Width /2,                Graph_offset + Graph_Height + 5);           }           //데이터(막대선)을 그린다.           g.setColor(Color.red);           for(int i = 0; i                int bar_height = data_set[i] * Graph_Height / 100;                g.fillRect(Graph_offset + X_Tick_Width * i + X_Tick_Width / 4,                Graph_offset + Graph_Height - bar_height,                X_Tick_Width / 2, bar_height);           }     } } |
|
예제> bar_chart.java . |
|
import java.awt.*; import java.applet.*;      public class bar_chart extends Applet {      static int data_set[] = {0, 0, 0, 0};       // HTML문서에서 받아 들일 data의 초기값 지정      final static String data_label[] = {'국어', '산수' ,'바른 생활', '자연' };      int Graph_offset = 20;      int Graph_Height = 150;      int Y_Tick_Height = Graph_Height / 5;      int Graph_Width = 240;      int X_Tick_Width = Graph_Width / data_set.length;      public void init()      {           resize(400, 300);           setBackground(Color.white);           String str;           str = getParameter('0'); //애플릿 클래스에 정의 리턴값으로 String           data_set[0] = Integer.valueOf(str, 10).intValue(); //valueOf           //intValue           str = getParameter('1');           data_set[1] = Integer.parseInt(str); //parseInt           str = getParameter('2');           data_set[2] = Integer.parseInt(str);           str = getParameter('3');           data_set[3] = Integer.parseInt(str);     }      public void paint (Graphics g)      {           g.setColor(Color.black);           //X축을 그린다.           g.drawLine(Graph_offset + Graph_Width, Graph_offset,           Graph_offset + Graph_Width, Graph_offset + Graph_Height);           //X-점 레이블을 그린다.           for(int i = 0; i <= 5; i++)           {                g.drawString(String.valueOf(i*20), Graph_offset + Graph_Width + 10,                Graph_offset + Graph_Height - (i * Y_Tick_Height));                //모는 선을 그린다.                g.drawLine(Graph_offset,                     Graph_offset + Graph_Height - (i * Y_Tick_Height),                     Graph_offset + Graph_Width + 5,                     Graph_offset + Graph_Height - (i * Y_Tick_Height));           }           //X축을 그린다.           g.drawLine(Graph_offset, Graph_offset + Graph_Height,           Graph_offset + Graph_Width, Graph_offset + Graph_Height);           //X-점 레이블을 그린다.           for(int i = 0; i < data_set.length; i++)           {                g.drawString(data_label[i],                     Graph_offset + X_Tick_Width * i + X_Tick_Width / 4,                     Graph_offset + Graph_Height + 20);                //X-점 선을 그린다.                g.drawLine(Graph_offset + X_Tick_Width * i + X_Tick_Width / 2,                Graph_offset + Graph_Height,                Graph_offset + X_Tick_Width * i + X_Tick_Width /2,                Graph_offset + Graph_Height + 5);           }           //데이터(막대선)을 그린다.           g.setColor(Color.red);           for(int i = 0; i                int bar_height = data_set[i] * Graph_Height / 100;                g.fillRect(Graph_offset + X_Tick_Width * i + X_Tick_Width / 4,                Graph_offset + Graph_Height - bar_height,                X_Tick_Width / 2, bar_height);           }     } } |
|
11.Retangle
Class 에 대하여
멤버Method
public
Rectangle getBound ( );
public Point getLocation ( );
public Dimension
getSize ( );
public void move ( int x, int y );
public void reshape ( int
x, int y, int width, int heigth );
public void resize( int width, int height
);
public void setBound ( Rectangle r );
public void setBound ( int x, int
y, int width, int height );
public void setLocation ( int x, int y
);
public void setLocation ( Ponit p );
public void setSize ( Dimension d
);
public void setSize ( int width, int height );
public void translate (
int x, int y );
Public boolean inside ( int x, int y );
--> 정해진 사각형(
Rectangle의 범위) 속을 클릭했는지를 판단한다. 사각형의 속을 선택했다면 true의 값을 그렇지 않다면 false의 값을 반환한다.
1. 사용할 사각형의 정보를 기록할 Rectangle 객체
선언
|
2.
메쏘드 사용
|
Please
Mail to me:
hoya1@shinbiro.com
12.JDK1.0.2에서의
Event 객체
**특정 이벤트 처리가 없는
Event Method에 관한 java1.0.x --Event Modelling
**특정 이벤트 처리 메소드가 없을 경우 일괄적인 이벤트
처리 하지만 특정한 이벤트 처리 메소드를 사용하는 것이 Compiler에 유리하다.
* Java는 Event 중심의 프로그램이다.
사건발생 -> Java ( Event 객체 생성 ) -> 사건에 대한 정보 저장 -> 정보참조프로그램 동작
** MouseClick 등
-> 이벤트가 발생할 때까지 루프하며 기다린다.
자바는 어떤 이벤트가 일어나면 이벤트를 구별하도록 돕는 메쏘드가 있다.
이들을 컨비니언트 메쏘드라고 한다.
(세트로 선언되어 있음 -> Component Class에 … : Applet Class의 Supet Class)
Component Class에 정의 되어 있는 이벤트관련 Method |
public
boolean mouseDown ( Event evt, int x, int y ); public boolean mouseUp ( Event evt, int x, int y ); public boolean mouseMove ( Event evt, int x, int y ); public boolean mouseDrag ( Event evt, int x, int y ); public boolean mouseEnter ( Event evt, int x, int y ); public boolean mouseEdit ( Event evt, int x, int y ); |
public
boolean action (Event evt, Object arg ) {        // Parameter        evt -> 이벤트를 발생시킨 이벤트 객체.        Arg -> bit단위로 객체를 비교할 대상 객체        if ( evt instanceof 객체명 ) //Event를 발생시킨 인스턴스 구별        {               if ( arg.equals(' ') //객체를 bit단위로 비교하는 메소드               {               구현문…….               }        } } |
JDK1.0.2 이벤트 처리 메소드 | |
이벤트 고유의 메소드 | 'action' 'keyDown', 'keyUp' 'mouseDown', 'mouseUp' 'mouseMove', 'mouseUp' 'mouseEnter', 'mouseExit' 'getFocus', 'lostFocus' |
모든 이벤트를 처리하는 메소드 | 'handleEvent' |
Component Class는 두가지 이벤트 처리 메소드를 제공함        -> 특정 이벤트 또는 이벤트 차입만을 처리하는 몇 가지 메소드.        -> 모든 것을 처리하는 메소드               ** 가능한 고유의 이벤트 처리 매소드 사용 |
              **Event.WINDOW_DESTROY와 같은 이벤트는 handleEvent로만 받을 수
있다.
Event 객체의 공개 필드 - JDK1.0.2 | |
target | 이벤트가 목표하는 객체, 예를 들어 마우스 클릭을 받은 텍스트 필드 |
id | 이벤트 타입을 지정한 정수, 예를 들어 Event_ACTION_EVENT |
when | 이벤트 시간 도장, 밀리초 단위 ( 1 / 1000 ) |
x,y | 이벤트를 받는 컴포넌트의 좌표계 내에서의 이벤트 위치 |
key | 이벤트를 발생시키는 키 |
modifiers | 쉬프트 또는 컨트롤과 같은 변경 모드 키 상태 |
arg | 일반적 목적을 위한 Obict 추가 매개 변수 |
Cpomponet Window 이벤트 정보 | ||
이벤트 종류 | 대상 클래스 | 이벤트 ID와 유효 필드 |
키보드 | Component | KEY_PRESS : when, key, modifiers KEY_RELEASE : when, key, modifiers KEY_ACTION : when, key, modifiers KEY_ACTION_RELEASE : when, key, modifiers |
마우스 | Component | MOUSE_DOWN : when, x, y, modifiers,
clickCount MOUSE_UP : when, x,y, modifiers MOUSE_DRAG : when, x, y, modifiers MOUSE_ENTER : when, x, y MOUSE_ EXIT : when, x, y |
윈도우 | Window | WINDOW_DESTROY WINDOW_ICONIFY WINDOW_DEICONIFY |
Dialog | WINDOW_MOVED : x, y | |
Frame | WINDOW_MOVED : x, y | |
초점 | Component | GOT_FOCUS LOST_FOCUS |
예제 프로그램 코팅 ( 제목 :
원초적 낙서장
)
-----------------------------------------------------------------------
import
java.applet.*;
import java.awt.*;
public class Scribble1 extends
Applet
{
          private int last_x, last_y; //시작좌표를 기억할 정수형 변수
선언
          public boolean mouseDown ( Event evt, int x, int y
)
          {
                    last_x = x;
                    last_y =y;
                    return true;
          }
          public boolean mouseDrag (Event evt, int x, int y
)
          {
                    Graphics g = getGraphics( );
                    g.drawLine ( last_x, last_y, x, y);
                    last_x = x;
                    last_y = y;
                    return true;
          }
}
Please
Mail to me:
hoya1@shinbiro.com
13. Image
Class 에 대하여
                    java.awt Package에 정의되어 있는 Class
                    java에서 사용하는 이미지를 관리하는 클래스.
1. 사용하려는 Image의 변수를
선언한다.              Image img; |
2. 그리기 위한 Image를 구해온다.             img = getImage(URL url);             img = getImage(URL url, String name);  이미지를 로드해 이미지 클래스를 자동르로 만드는 기능을 제공한다.. 이것을 위해 URL을 지정하거나 이미지 파일이 있는 경로를 주어야 한다. 자바언어에서 getImage( )에 URL인수를 주는 두가지 method를 제공하고 있다. getCodeBase( ) :실행을 할수 있는 애플이 위치한 디렉토리를 나타낸다. getDocumentBase(): 실행할수 있는 자바 애플릿을 위한 HTML화일이 위치한 디렉토리를 나타낸다. ** 웹상에서 Image 구하기 Image img = getImage(new URL(http://www.myserver.com/sample.gif)); |
3. 이미지를 그린다.         drawImage ( Image img, int x, int y, ImageObserver observer );         drawImage ( Image img, int x, int y, int width, int height, ImageObserver observer );                           --> 이미지를 그릴 때 크기를 조절하여 그릴 수 있게한다(stretch) |
boolean imageUpdate ( ImageUpdate img,
int infoflags, int x, int y, int width, int height );           // Parameter               img -> Java가 통지를 송신하는 이미지를 지정               infoflages-> 비트 마스크 변수 -          //repaint Method를 호출하여 화면의 영역을 다시 그린다. 심지어 이미지의 일부만 사용 가능할 경우에도 그렇다.             함수를 재정의하면 프로그램은 이미지기 로드 되어 디스플레이 준비가 되었을 때를 탐지할 수 있다. |
비트 필드 | 의 미 |
ABORT | 이미지 생성이 중단된다. |
ALLBITS | 이미지가 완성된다. |
ERROR | 오류가 일어 났다 |
FRAMEBIT | 새 이미지 프레임이 완성되었다. |
HEIGHT | 높이 정보가 사용 가능하다. |
PROPERTIES | 이미지 프로퍼티가 사용 가능 하다. |
SOMEBITS | 이미지의 일부가 사용 가능 하다. |
WIDTH | 너비 정보가 사용 가능 하다. |
예제>
image_applet.java 기본적인 이미지 예제 |
import
java.awt.*; import java.applet.*; public class image_applet extends Applet {      Image img;      public void init()      {           img=getImage(getCodeBase(),'java1.gif');      }      public void paint(Graphics g)      {           g.drawImage(img,0,0,this);      } } |
Please Mail to
me:
hoya1@shinbiro.com
예제>gif_anime.java-애니메이션 첫번째 이야기 ** Runnable Interface ** Thread Class ** 예외사항 처리에 대하여 . |
import
java.awt.*; import java.applet.*; public class colorLines extends Applet {       int img_index = 0;       Thread anime = null;       String img_names[] = {'java1.gif', 'java2.gif', 'java3.gif', 'java4.gif', 'java5.gif', 'java6.gif'};       Image java_img[] = new Image[6];       public void init()       {             for (int i = 0; i < 6; i++)                   java_img[i] = getImage (getCodeBase(), img_names[i]);       }       public void start()       {             if (anime == null)             {                   anime = new Thread(this);                   anime.start();             }       }       public void paint (Graphics g)       {             g.drawImage (java_img[img_index], 0, 0, this);       }       public void run()       {             while (anime != null)             {                   img_index++;                   if (img_index > 5)                   img_index = 0;                   repaint();                   try {                         Thread.sleep (200);                        }                  catch (InterruptedException e) {};             }       }       public void stop ( )       {             if ( anime != null )             {                   anime.stop ();                   anime = null;             }       } } |
예제>gif_anime2.java--애니메이션 두 번째 이야기 Update Method를 재정의하여 깜박임을 줄이기 repaint()에 관하여….. |
gif_anime1.java      AND      gif_anime2.java |
**애니메이션을 구현하기 위해서 repaint()
Method를 호출할 때 앞에서는 repaint()
Method가 paint()
Method를 강제로 호출한다고 했지만 실제로는 아래와 같은 과정을 밟는다.                                     repaint --> update() 호출 --> paint() 호출 기본적으로update Method는 배경색상으로 드로잉 영역을 지운다( 그린다 ) 애니메이션 구현에서는 update() Method의 기본적의 기능 때문에 예제 1과 같이 깜박임 현상이 발생하므로 이러한 기능을 억제하도록 재정의 해주어야 한다. repaint의 스레드 구현 방식 1. repaint는 비동기적이다. 따라서 그리기가 끝날 때까지 기다리는 것이 아니라 그 즉시 반환되어 온다. 2. 컴포넌트 하나에 아직 해결되지 않은 repaint 요청이 그리기 큐(queue)에 쌓여 있다면 AWT는 그것들을 하나의 요청으로 합친다. 따라서 여러분들이 repaint요청을 보낸 만큼 실제로 paint나 update가 호출된다고 가정해선 안된다. //이 코드를 예제
1에 추가시키면 예제 1과 2의 차이를 볼수 있다. |
예제> gif_anime3.java->세 번째 이야기 MediaTracker Class 이미지를 사전에 로드하여 깨끗한 애니메이션 창출. |
import
java.applet.*; import java.awt.*; public class gif_anime3 extends Applet implements Runnable {       int img_index = 0;       Thread anime = null;       String img_names[] = {'java1.gif', 'java2.gif', 'java3.gif','java4.gif', 'java5.gif', 'java6.gif'};       Image java_img[] = new Image[6];       public void init ()       {             MediaTracker mt = new MediaTracker(this);             for (int i=0; i<6; i++)             {                   java_img[i] = getImage (getCodeBase(), img_names[i]);                   mt.addImage (java_img[i], i);             }             try    { mt.waitForAll(); }             catch (InterruptedException e) {};       }       public void start()       {             if (anime == null)             {                   anime = new Thread(this);                   anime.start();             }       }       public void paint (Graphics g)       {             g.drawImage (java_img[img_index], 0, 0, this);       }       public void run()       {             while (anime != null)             {                   img_index++;                   if (img_index > 5)                          img_index = 0;                   repaint();                   try {                         Thread.sleep (200);                        }                  catch (InterruptedException e) {};             }       }       public void stop ( )       {             if ( anime != null )             {                   anime.stop ();                   anime = null;             }       } } |
학습 point...
    예외 처리(Exception Handling) |
예외 처리는 C++와 문법이 거의
같다. 즉, try, catch, throw 구문을 사용한다. 다음은 전형적인 예외 처리 구문이다. try { Thread.sleep(200);}catch ( InterruptedException e ) { System.out.println('Sleep interrupted!!!'); } try 블록은 예외가 발생할 수 있는 실행문들을 포괄하는 블록이며 catch는 try
블록에서 예외가 발생한 경우 이를 처리하는 블록이다. 또, throw는 예외를 발생시키는 예약어이다. 메소드 안에서 throw가 쓰일 경우 C++에서와 마찬가지로 throw의 대상은 클래스 인스턴스이다. 예를 들면 다음과 같다. class RangeException extends Exception { // RangeException 예외 클래스 선언문 몸체} class Sample { try { getRange(i); } catch(RangeException e) { System.out.println('범위 밖의 값입니다.'); }  getRange (int i) { if (i>10) { throw new RangeException(); } ... }} C++와 달리, 자바에서는 예외 처리와 관련한
또하나의 예약어 finally가 있다. try { if (music != null) { music.loop(); } ... 생략(실행할 내용들)...} finally { if (music != null) { music.stop(); }} 위 예에서는 music이라는 이름의 오디오 파일을 반복해서 연주하면서 다른 실행문들을 수행하다가, 그 실행문들의 수행이 끝나거나 혹은 수행 중에 어떤 예외나 break, continue 문 등을 만나서 try 블록을 탈출하더라도 finally 블록을 무조건 수행하게 되어 오디오 파일 연주를 반드시 중단시키게 된다. 이 finally 블록은 주로 파일이나 네트웍 소켓 등과 같이 일단 연 다음, 어떠한 예외 상황이 발생하더라도 반드시 닫아야만 하는 리소스를 관리하는 데 흔하게 사용된다. |
학습 point...
쓰레드 클래스와 입출력 클래스 |
java.lang.Thread 클래스 |
자바에서 잘 정의된 시스템 독립적인 추상 윈도우 시스템 외에 또하나 주목할 부분은 쓰레드를 지원한다는 점이다. 쓰레드는 프로세스 내에서 하나의 연속적인 제어 흐름이다. 이것은 프로그램 내에서 실행될 때 각각의 쓰레드는 하나의 시작점 과 하나의 흐름을 가지고, 런타임의 모든 시점에서 하나의 실행 지점을 가지고 또 하나의 끝점을 가진다는 의미이다. 쓰레드 객 체는 멀티쓰레드 프로그래밍의 기반으로 멀티쓰레드 프로그래밍은 하나의 프로그램이 서로 다른 일을 수행하는 여러 개의 쓰레드 를 동시에 수행할 수 있게 해 준다. 실행 쓰레드를 새로 하나 만들려면 java.lang.Thread 클래스에서 하위 클래스를 파생하여 run() 도구를
오버라이드하면 된다. 오 버라이드된 run() 도구에는 새로 만들어진 쓰레드가 수행할 코드가 들어가게 된다. 다음 start() 도구를 호출하면
쓰레드 인스턴 스가 생성된다. start() 도구는 쓰레드를 생성하고 run() 도구를 실행하는 역할을 한다. 자바 가상 기계(자바의 커널로 볼 수 있지만 기계 독립적으로 추상화된 부분)는 데몬 쓰레드가 아닌 모든 쓰레드가
종료할 때까 지 실행된다. 쓰레드는 run() 도구를 모두 수행하고 반환될 때나 stop() 도구가 호출될 때 종료한다. |
학습 point...
MediaTracker |
public MediaTracker ( Component comp ); |
|
14.
Canvas/Panel/Button Class 에 대하여
이 Class는 자체적으로 디폴트 드로잉이나 이벤트를 처리를 하지않는 Component이다.
이 Class의 서브 Class를 만들어 어떠한 종류의 드로잉이나 이미지도 디스플레이 할 수 있으며 어떠한 종류의 사용자 입력 이벤트를 처리할 수 있다. Canvas는 자신의 Super Class의 이벤트 처리 Method를 상속한다. JDK1.1.x에서는 Canvas를 서브 Class로 만드는 대신 Component를 직접 서브 Class화하여 '경량급(ligntweight)컴포넌트'를 만들 수 있다.
public class Canvas extends Component
생성자
-> public Canvas ( );
멤버 Method
public void paint ( Graphics g );
Canvas class 예제>
---------------------------------------------------------------------------------
import java.awt.*;
import java.applet.*;
public class myTool extends Applet
{
     myCanvas cvs;
     ..................................     
     public void init()
     {
          cvs=new MyCanvas();
          cvs=reshape(0,0,100,100);
          leftPanel.add('Center', cvs); //왼족 패널 옆의 중앙에 캔버스를 놓음
          ...........................
     }
     class myCanvas  extends Canvas
     {
          public void paint(Graphics g)
          {
                g.drawRect(0,0,99,99);
                g.drawString('Canvas', 15,40);
         } 
}
---------------------------------------------------------------------------------
이 Class는 컨테이너 속에 들어 있는 Container이다. Frame이나 Dialog와는 달리 Panel은 자체의 독립적인 창을 만들지 않는 컨테이너이다.
기본적으로 LayoutManager는 FlowLayout이다. Applet의 super Class.
public class panel extends Container
생성자
public Panel ( );
public Panel ( LayoutManager layout ); //jdk1.1.x에 새로이 정의
Please Mail to me:
hoya1@shinbiro.com
예제> Buttons.java 버튼의 사용을 이해한다. . |
download Buttons.zip |
import
java.awt.*; import java.applet.*;        public class Buttons extends Applet {       Button b1, b2, b3;       public void init()       {             resize(400,100);             b1 = new Button('B1');             b2 = new Button('B2');             b3 = new Button('B3');             this.add(b1);             this.add(b2);             this.add(b3);       } public boolean action(Event ev, Object arg) {       if (ev.target.equals(b1))       {               showStatus('User pressed B1 button!');                      // Requests that the argument string be displayed in the 'status window'.       }       if (ev.target.equals(b2))       {             showStatus('User pressed B2 button!');       }        if (ev.target.equals(b3))       {             showStatus('User pressed B3 button!');             return true;       } } |
학습 point... action event |
boolean action(Event evt, Object arg) |
이벤트들은 Event class에
저장되며 이들 이벤트들은 Component class에서 정의된 메소드들의 의해 처리된다 |
학습 point...
Button Class |
- Button():
construct an unlabeled button - Button(String s): construct a labeled button         각 button의 레이블은 유일해야 한다 이는 event handling과 관계가 있기때문         (버튼을 클릭하면 button event가 발생하는데 button label은 어떤 버튼이 눌려졌는가를 아는데 사용됨) |
예제> Scribble1.java . |
import
java.awt.*; import java.applet.*; class grimpan extends Canvas //캔버스 클래스에서 우리가 사용할 클래스를 파생 받아 재정의하여 사용                                              //Canvas Class는 그림을 그리는 판 역할을 한다. {      Color col;      Point sijak;      int dogu;      public grimpan() //Canvas Class의 생성자 Method - 초기화      {           resize(298, 346);           setBackground(Color.white);           sijak = new Point(0,0);           col = new Color(0);      }      public void paint(Graphics g) //Canvas Class의 기본 Method      {           g.drawRect(0,0,298,346);           g.drawRect(1,1,297,345);           g.drawRect(2,2,296,344);      }      public boolean mouseDown(Event evt, int x, int y)      {           sijak.x = x; sijak.y = y;           return true;      }      public boolean mouseDrag(Event evt, int x, int y)      {           Graphics g = getGraphics();           g.setColor(col);           if( dogu==1 )           {                g.drawLine(sijak.x, sijak.y, x, y);                sijak.x = x; sijak.y = y;                return true;           }           return false;      }      public boolean mouseUp(Event evt, int x, int y)      {           Graphics g = getGraphics();           g.setColor(col);           int w,h;           w = x -sijak.x; h = y - sijak.y;           if(w < 0)              {  w = -w; sijak.x=x; }           if(h < 0)              {  h = -h; sijak.y=y; }              if(dogu == 2)           {                g.drawRect(sijak.x, sijak.y, w, h);                return true;           }           if(dogu == 3)           {                g.drawOval(sijak.x, sijak.y, w, h);                return true;           }           return false;      } } public class Scribble1 extends Applet //주 Class( 최상위 Class ) {      Rectangle red, green, blue;      Rectangle line, rect, ellipse;      grimpan gp = new grimpan();      public void init()      {           setLayout(null); //Container 객체들의 기본적으로 Layout을 가지고 있다.//Layout 설정을 해제함           resize(302,460);           red = new Rectangle(2,2,98,50);           green = new Rectangle(102,2,98,50);           blue = new Rectangle(202,2,98,50);           line = new Rectangle(2, 400, 98, 50);           rect = new Rectangle(102, 400, 98, 50);           ellipse = new Rectangle(202, 400, 98, 50);           add(gp); //그림판의 추가 add( Component comp);           gp.move(2, 54); //그림판의 위치설정      }      public void paint(Graphics g)      {           g.setColor(Color.red);           g.fillRect(red.x, red.y, red.width, red.height);           g.setColor(Color.green);           g.fillRect(green.x, green.y, green.width, green.height);           g.setColor(Color.blue);           g.fillRect(blue.x, blue.y, blue.width, blue.height);           g.setColor(Color.black);           g.drawString('RED',5,20);           g.drawString('GREEN',105,20);           g.drawString('BLUE',205,20);           g.drawRect(line.x, line.y, line.width, line.height);           g.drawRect(rect.x, rect.y, rect.width, rect.height);           g.drawRect(ellipse.x, ellipse.y, ellipse.width, ellipse.height);           g.drawString('Line',5,420);           g.drawString('Rect',105,420);           g.drawString('Ellipse',205,420);      }      public boolean mouseDown(Event evt, int x, int y)      {           if(red.inside(x,y))           {                gp.col = Color.red;                return true;           }           if(green.inside(x,y))           {                gp.col = Color.green;                return true;           }           if(blue.inside(x,y))           {                gp.col = Color.blue;                return true;           }           if(line.inside(x,y))           {                gp.dogu = 1;                return true;           }           if(green.inside(x,y))           {                gp.dogu = 2;                return true;           }           if(blue.inside(x,y))           {                gp.dogu = 3;                return true;           }           return false;      } }        |
학습
point... rectangle class |
1. 생성자 :public Rectangle( int x, int
y, int width, int height ); //위 예제에서 먼저    red = new Rectangle(2,2,98,50);      green = new Rectangle(102,2,98,50);     blue = new Rectangle(202,2,98,50);      line = new Rectangle(2, 400, 98, 50);    rect = new Rectangle(102, 400, 98, 50);     ellipse = new Rectangle(202, 400, 98, 50); 로 다섯개의 Retangle을 선언하였다. 2.  사각형 채우기  g.setColor(Color.red);   g.fillRect(red.x, red.y, red.width, red.height);    g.drawString('RED',5,20);................... 각각 다섯개의 사각형에 색깔을 채우고 그린후....글자 표현........... 3.Public boolean inside ( int x, int y ); |
15.
LayoutManager 에 대하여
모든 Container계열의 Class들은 기본적인 구성요소 정열 방식인 Layout을
갖는다.
java.awt.LayoutManager
Panel계열의 Class는 기본적으로
FlowLayout을 Window계열의 Class는 기본적으로 BorderLayout을 각각 가진다.
Layout의 종류
1. FlowLayout
2.
GridLayout
3. BorderLayout
4. CardLayout
5. GridBagLayout
6.
GridBagConstraints
public class GridLayout extends Object implements
LayoutManager, Serializable
생성자
public GridLayout (
);
public GridLayout ( int rows, int cols ); //rows는 행의 개수, cols는 열의
개수.
public GridLayout ( int rows, int cols, int hgap, int vgap );//rows는 행의
개수, cols는 열의 개수, hgap 수직차이. vgap 수평차이.
예제>
Boder.java BorderLayout 예제 |
import
java.awt.*; import java.applet.*; public class Border extends Applet {        Button b1, b2, b3, b4, b5;        public void init()        {               setLayout(new BorderLayout());//Layout을 BorderLayout으로 지정               b1=new Button('Center');//'Center'라는 이름의 버튼 지정               b2=new Button('East');               b3=new Button('West');               b4=new Button('South');               b5=new Button('North');               add('Center', b1);//b1버튼을 가운데 위치               add('East', b2);               add('West', b3);               add('South', b4);               add('North', b5);        } } |
Please Mail to me:
hoya1@shinbiro.com
예제> Scribble_b.java **색상 선택 및 도구 선택을 버튼으로 이용해 세련된 모양을 갖춤. **유사 행동에 대한 이벤트처리 ( action Method ) 이용 **draw Method의 한계를 프로그램 로직으로 극복. |
import
java.awt.*; import java.applet.*;            public class Scribble_b extends Applet {       Color col;       int dogu;       Point sijak;       Panel c_panel,d_panel;       public void init()       {             this.resize(500,460);             this.setBackground(Color.white);             col = new Color(0);             sijak = new Point(0,0);             dogu = 1;             c_panel = new Panel();             c_panel.setLayout(new GridLayout(4,2));             c_panel.add(new Button('Red'));             c_panel.add(new Button('Blue'));             c_panel.add(new Button('Green'));             c_panel.add(new Button('Gray'));             c_panel.add(new Button('Cyan'));             c_panel.add(new Button('Magenta'));             c_panel.add(new Button('Yellow'));             c_panel.add(new Button('Black'));             d_panel = new Panel();             d_panel.setLayout(new GridLayout(1,3));             d_panel.add(new Button('Line'));             d_panel.add(new Button('Rectangle'));             d_panel.add(new Button('Ellipse'));             this.setLayout(new BorderLayout());             this.add('North', new Button('Scribble'));             this.add('West',c_panel);             this.add('South', d_panel);       }       public boolean mouseDown(Event evt, int x, int y)       {             sijak.x = x;             sijak.y = y;             return true;       }       public boolean mouseDrag(Event evt, int x, int y)       {             Graphics g = getGraphics();             g.setColor(col);             if(dogu == 1)             {                   g.drawLine(sijak.x, sijak.y, x, y);                   sijak.x = x;                   sijak.y = y;                   return true;             }             return false;       }       public boolean mouseUp(Event evt, int x, int y)       {             Graphics g = getGraphics();             g.setColor(col);             int w, h;             w = x - sijak.x;             h = y - sijak.y;             if(w < 0) //폭 값의 양수 값 얻음.                   { w = -w; sijak.x=x; }             if(h < 0)                   { h = -h; sijak.y=y; }             if(dogu == 2)             {                   g.drawRect(sijak.x, sijak.y, w, h);                   return true;             }             if(dogu == 3)             {                   g.drawOval(sijak.x, sijak.y, w, h);                   return true;             }             return false;       }       public boolean action(Event evt, Object arg)       {             if(evt.target instanceof Button)             {                   if(arg.equals('Red'))                         col = Color.red;                   if(arg.equals('Blue'))                         col = Color.blue;                   if(arg.equals('Green'))                         col = Color.green;                   if(arg.equals('Gray'))                         col = Color.gray;                   if(arg.equals('Cyan'))                          col = Color.cyan;                   if(arg.equals('Magenta'))                         col = Color.magenta;                   if(arg.equals('Yellow'))                         col = Color.yellow;                   if(arg.equals('Black'))                         col = Color.black;                   if(arg.equals('Line'))                         dogu = 1;                   if(arg.equals('Rectangle'))                         dogu = 2;                   if(arg.equals('Ellipse'))                         dogu = 3;                         return true;             }             return false;       } }        |
학습
point... Button Event |
      public boolean
action(Event evt, Object
arg) |
16. Card
Layout에 대하여
public
CardLayout extends Object implements LayoutManager
- Windows 프로그램의
'탭 설정 Window'의 기능을 구현하는 Layout이다.
- 복수의 페이지를 설정, 각각의 페이지에 별도의 디스플레이를
구현한다.
탭 대화상자(tabbed dialogs)나 동적인 대화상자를 가능하게 하는 레이아웃
관리자 클래스이다. 여러 장의 카드가 있으나 보이는 카드는 하나만 있다는 개념에서 나온 이름이다. add 메소드를 실행할 때 각 카드를 식별할
수 있는 문자열을 지정해야 하고, 나중에 show 메소드에 이 문자열을 인자로 줘서 해당 카드가 보이게 할 수 있다. first(),
last(), next(), previous() 등의 도구를 사용하여 카드 간에 순차적으로 이동할 수도 있다. 사용 방법은 다음 예제를
참고한다. 예제에서는 간단히 하기 위해 카드로 버튼을 사용하고 있으나 실제로는 여러 컴퍼넌트를 포함하는 패널이나 그래픽 요소를 담은 캔버스와
같은 것이 주로 사용될 것이다.
생성자 | CardLayout ( ); CardLayout ( int hgap, int vgap );
| ||
Method | |||
CardLayout에 구성요소를 삽입하기 위해서는 Container에 정의되어 있는
add
Method를
사용. Component add ( String name, Component comp );
Ex)) add ( Page 1, new Button ( 'One' )); // CardLayout의 Page 1이라는 레이블이 붙은 페이지에 단추를 추가한다. | |||
CardLayout에서 새 페이지로 전환하기 원할 때에는 show Method를 사용한다. void show (Container parent, String name );
CardLayout에서의 페이지 플리핑 | |||
위치상 가장 앞에 등록된 페이지 즉, 가장 앞 페이지로 이동하는데 사용하는 first
Method void first ( Component parent ); *위치상 바로 앞 페이지로 이동할 때 사용하는 previous Method void previous(Component parent); *위치상 바로 뒤 페이지로 이동할 때 사용하는 next Method void next ( Component parent ); *위치상 가장 뒷 페이지로 이동할 때 사용하는 last Method void last ( Component parent );
|
예제>card_test.java Card Layout 예제 |
import
java.awt.*; import java.applet.*; public class Border extends Applet {        CardLayout card_layout = new CardLayout();        Panel control_panel = new Panel();        Panel page1_panel = new Panel();        Panel card_panel = new Panel();        public void init()        {               setLayout(new BorderLayout());               control_panel.add(new Button('Page1'));               control_panel.add(new Button('Page2'));               control_panel.add(new Button('Page3'));               add('North', control_panel);               card_panel.setLayout(card_layout);               page1_panel.add(new Label('First Page',Label.CENTER));               page1_panel.add(new Label('Java World is Programming'));               card_panel.add('1th', page1_panel);               card_panel.add('2th', new Label('This is Secound Page', Label.CENTER));               card_panel.add('3th', new Label('Last Page ByeBye', Label.CENTER));                             add('Center', card_panel);        }        public boolean action(Event evt, Object arg)        {        if(evt.target instanceof Button)        {               if(arg.equals('Page1'))               {                      card_layout.show(card_panel, '1th');                      return true;               }               if(arg.equals('Page2'))               {                      card_layout.show(card_panel, '2th');                      return true;               }               if(arg.equals('Page3'))               {                      card_layout.show(card_panel, '3th');                      return true;               }        }        return false;        } } |
Please Mail to me:
hoya1@shinbiro.com
17.
LayoutManager를 사용하지 않고 구성요소를 지정하기
void reshape ( int x, int y, int width,
int height ); |
Parameter | 의 미 |
‘x | 추가되는 구성요소 왼쪽 상단의 좌표를 나타냄. |
‘y | |
‘width | 추가되는 구성요소 폭과 높이의 수치를 나타냄 |
‘height |
void resize ( int width, int height );
//구성요소의 크기를 결정하는 Method
void resize ( Dimention d
);
      
      JDK1.0.x a JDK1.1.x
version경우
      
            
      setSize ( int width, int height
);
      
            
      setSize ( Demention d
);
예제>no-layout.java button1을 누르면 button5가 button2를 button4가 사라지게 하고, 다시 button3을 누르면 사라졌던 button4와 button5를 나타나게 하는 applet. 여기서는 기본 Layout을 해제하고 스스로 위치를 정하는 것을 연습하는 프로그램. |
import
java.awt.*; import java.applet.*; public class no_layout extends Applet {        Button button1 = new Button('Button 1');        Button button2 = new Button('Button 2');        Button button3 = new Button('Button 3');        Button button4 = new Button('Button 4');        Button button5 = new Button('Button 5');        public void init()        {               setSize(300,150);               setBackground(Color.gray);               setLayout(null);               add(button1);               add(button2);               add(button3);               add(button4);               add(button5);               button1.reshape(0,0,100,50);               button3.reshape(100,50,100,50);               button2.reshape(200,0,100,50);               button4.reshape(0,100,100,50);               button5.reshape(200,100,100,50);        }        public boolean action(Event evt, Object arg)        {               if(evt.target == button1)               {                      if(button5 != null)                      {                             remove(button5);                             button5 = null;                             return true;                      }               }               if(evt.target == button2)               {                      if(button4 != null)                      {                             remove(button4);                             button4 = null;                             return true;                      }               }               if(evt.target == button3)               {                      if(button5 == null)                      {                             button5 = new Button('Button 5');                             add(button5);                             button5.reshape(200, 100, 100, 50);                      }                      if(button4 == null)                      {                             button4 = new Button('Button 4');                             add(button4);                             button4.reshape(0,100,100,50);                      }                      return true;               }        return false;        } } |
Please Mail to
me:
hoya1@shinbiro.com
18. TextField
Class 에 대하여
예제>gugu.java 입력된 수를 받아들여 그 수의 구구단을 출력하는 예제 |
import
java.awt.*; import java.applet.*;         public class gugu extends Applet {        Label su = new Label('Dan: ');        TextField input_dan = new TextField('input number',12);        Button DanOut = new Button('DAN');        int dan;        public void init()        {               add(su);               add(input_dan);               add(DanOut);        }        public void paint(Graphics g)        {               if(dan != 0)               {                      for(int i=1;i<=9;i++)                      {                             g.drawString(dan + '*' + i + '=' + dan*i,70,45+20*i);                      }               }       }        public boolean action(Event evt, Object arg)        {               if(evt.target == DanOut)               {                      String str;                      str = input_dan.getText();                      dan = Integer.parseInt(str);                      repaint();                      return true;               }        return false;        } } |
Please Mail to
me:
hoya1@shinbiro.com
예제> eye.java |
import
java.awt.*; import java.applet.*;            class eye extends Applet {           int eye_x,eye_y;           int R=25,r=10; //큰원의 반지름을 25 작은 원의 반지름을 10으로 한다.           boolean gam; //눈 감는 경우는 TRUE 눈동자 굴릴 경우 FALSE로 한다.           Rectangle gamjak;           public void init()           {                     resize(300,250);                     setBackground(Color.blue);//바탕색을 파랑색으로...                     eye_x=115; eye_y=115;//왼쪽 눈동자의 시작 좌표.                     gam=true;//초기에는 감는 눈을 그린다.                     gamjak = new Rectangle(100,100,100,50);//전체 두눈의 사각형 범위           }           public void paint(Graphics g)           {                     if (gam)                     {                                //감는 눈을 그린다.                               g.setColor(Color.gray);                               g.fillOval(100,100,R*2,R*2);                               g.fillOval(150,100,R*2,R*2);                               g.setColor(Color.black);                               g.drawOval(100,100,R*2,R*2);                               g.drawOval(150,100,R*2,R*2);                               g.drawLine(100, 100+R, 100+R*4, 100+R);                     }                     else                     {                               //색을 흰색 테두리를 검은 색으로 하는 큰원 두개 그리기....                               g.setColor(Color.white);                               g.fillOval(100,100,R*2,R*2);                               g.fillOval(150,100,R*2,R*2);                               g.setColor(Color.black);                               g.drawOval(100,100,R*2,R*2);                               g.drawOval(150,100,R*2,R*2);                               //눈동자 두개 그리기.                               g.setColor(Color.black);                               g.fillOval(eye_x,eye_y,r*2,r*2);                               g.fillOval(eye_x+R*2,eye_y,r*2,r*2);                     }           }           public void update(Graphics g)           {                     paint(g);           }           public boolean mouseMove(Event evt, int x, int y)           {                     if(gamjak.inside(x, y ))                     {                               gam = true; //눈동자 내에서는 언제나 눈을 감고 있게 한다.                               repaint();                               return true;                     }                     else                     {                               gam=false;                                                              //삼각 함수를 이용 마우스의 위치에 따라 눈동자가 움직이게 한다.                               int m_x=x-125; int m_y=y-125;                               int a=(int)((R-r)*m_x/Math.sqrt((m_x)*(m_x)+(m_y)*(m_y)));                               int b=(int)((R-r)*m_y/Math.sqrt((m_x)*(m_x)+(m_y)*(m_y)));                               eye_x=a+125-10;                               eye_y=b+125-10;                               repaint();                               return true;                     }           } } |
예제> buttonlink.java 자바의 네트위킹에서 웝상에 연결한다.. |
import
java.awt.*; import java.applet.*; import java.net.*;       public class buttonlink extends Applet {       Bookmark bmlist[]=new Bookmark[3];       public void init()       {             bmlist[0]=new Bookmark('Daeho's homePage','http://www.shinbiro.com/~hoya1/main.html');             bmlist[1]=new Bookmark('LG-EDS SYSTEM','http://www.lgeds.lg.co.kr');             bmlist[2]=new Bookmark('JAVASOFT','http://wwwjavasoft.com');             setLayout(new GridLayout(bmlist.length,1,10,10));             for (int i=0; i                   add(new Button(bmlist[i].name));             }       }       public boolean action(Event evt, Object arg)       {             if(evt.target instanceof Button)             {                   LinkTo((String)arg);                   return true;             }             return false;       }       void LinkTo(String name)       {             URL theURL=null;             for (int i=0; i                   if(name.equals(bmlist[i].name))                   theURL=bmlist[i].url;                   if(theURL != null)                         getAppletContext().showDocument(theURL);             }       }       class Bookmark       {             String name;             URL url;             Bookmark(String name, String theURL)             {                   this.name=name;                   try                   {                         this.url=new URL(theURL);                   }                   catch(MalformedURLException e)                   {                         System.out.println('Bad URL'+theURL);                   }             }       } } |
학습
point...     애플릿을네트워크를 통한 웹과의 연결 |
새로운 웹 페이지에 연결하기 위해서는 URL클래스의 인스턴스를 만들어야 한다.. 이러한 URL클래스를 만드는 방법은 아래 4가지가 있다. |
URL(String, String, int,
String) |
학습 point...
    예외 처리(Exception Handling) |
예외 처리는 C++와 문법이 거의
같다. 즉, try, catch, throw 구문을 사용한다. 다음은 전형적인 예외 처리 구문이다. try { Thread.currentThread().sleep(1000);}catch ( InterruptedException e ) { System.out.println('Sleep interrupted!!!');} try 블록은
예외가 발생할 수 있는 실행문들을 포괄하는 블록이며 catch는 try 블록에서 예외가 발생한 경우 이를 처리하는 블록이다. 또, throw는
예외를 발생시키는 예약어이다. 메소드 안에서 throw가 쓰일 경우 C++에서와 마찬가지로 throw의 대상은 클래스 인스턴스이다. 예를 들면 다음과 같다. class RangeException extends Exception { // RangeException 예외 클래스 선언문 몸체} class Sample { try { getRange(i); } catch(RangeException e) { System.out.println('범위 밖의 값입니다.'); }  getRange (int i) { if (i>10) { throw new RangeException(); } ... }} C++와
달리, 자바에서는 예외 처리와 관련한 또하나의 예약어 finally가 있다. try { if (music != null) { music.loop(); } ... 생략(실행할 내용들)...} finally { if (music != null) { music.stop(); }} 위 예에서는 music이라는 이름의 오디오 파일을 반복해서 연주하면서 다른 실행문들을 수행하다가, 그 실행문들의 수행이 끝나거나 혹은 수행 중에 어떤 예외나 break, continue 문 등을 만나서 try 블록을 탈출하더라도 finally 블록을 무조건 수행하게 되어 오디오 파일 연주를 반드시 중단시키게 된다. 이 finally 블록은 주로 파일이나 네트웍 소켓 등과 같이 일단 연 다음, 어떠한 예외 상황이 발생하더라도 반드시 닫아야만 하는 리소스를 관리하는 데 흔하게 사용된다. |
|
|
|
 | |
|
|
 | |
|
|
친구에게 알리기 |
  이동 | 수정 | 삭제 | |