본문으로 바로가기

     

 

애플릿
웹 브라우저 환경에서 동작하는 작은 프로그램

애플릿 클래스
애플릿을 작성하려면 Applet 클래스를 상속받은 클래스를 선언해야 한다.

import java.applet.Applet;

class Sample1 extends Applet // Applet 클래스를 확장
{
 ...
 }

 

paint()메소드
애플릿 화면이 그려질 때 웹 브라우저가 호출 
Graphics 클래스
화면에 그리는 기능을 정리 (화면에 다양한 문자나 그림을 그릴 수 있도록 지원)
drawString()메소드
화면에 문자열을 표시 (왼쪽 위 모서리(10,10)에 문자열을 표시)

예제)

package practice;

import java.applet.Applet;
import java.awt.Graphics;

class Sample1 extends Applet
{
	public void paint(Graphics g) // 애플릿이 그려질 때 호출되는 메소드
	{
		g.drawString("java 애플릿", 10, 10); // 문자열을 지정된 위치에 그린다.
	}
}

 

 

HTML 파일
애플릿은 웹브라우저에서 실행되기 때문에 지금까지 해 왔던 것처럼 "java Sample1"을 입력해도 실행시킬 수 없다. 애플릿을 실행시키려면 HTML(HyperText Markup Language) 파일을 만들어야 한다.

주로 <> ~ </ > 라는 형태를 띄는 태그(tag)라 불리우는 기호로 이루어진다.
code = "클래스 파일 이름"
width = "애플릿의 폭"
height = "애플릿의 높이"

애플릿 실행하기
① 텍스트 에디터로 애플릿 코드를 입력한다 → 소스 파일이 작성된다.
② 컴파일러를 작동시켜 소스 파일을 컴파일한다. → 클래스 파일이 만들어진다.
③ 애플릿을 포함하는 HTML 파일을 작성한다.
④ 애플릿 뷰어 또는 웹 브라우저에서 HTML 파일을 지정한다.→ 애플릿이 실행된다.

다양한 애플릿 (선 그리기)

package practice;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;

public class Practice02 extends Applet {
	
	public void paint(Graphics g){
		g.drawLine(10, 10, 100, 100); // 지정된 위치 사이에 선을 그린다.
    }


 

색상과 폰트 변경하기

g.setColor(Color.red); // 색상을 빨간색으로 설정
g.drawLine(10, 10, 100, 100); // 빨간 선이 그려진다.
g.setFont(new Font("Serif", Font.BOLD, 24)); //폰트 이름 = Serif, 폰트 스타일 = 굵게, 폰트 크기 = 24pt
        

 

 

이미지 표시하기

package practice;

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;

public class Practice03 extends Applet {

	Image img;
	
	public void init() // 애플릿이 생성될 때 단 한 번 호출되는 메소드
	{
		img = getImage(getDocumentBase(), "Image.gif"); // 파일 이름.gif
	}
	
	public void paint(Graphics g){
		g.drawImage(img, 100, 100, this); // 이미지를 그린다.
	}
	public static void main(String[] args) {


	}

}

 

init() 메소드
웹 브라우저가 켜진 후, 애플릿이 실행될 때 처음 한 번만 자동으로 호출되는 메소드
즉, 사용자가 웹 브라우저를 켤 때 처음 한 번만 수행되어야 하는 작업
웹브라우저가 시작과 동시에 애플릿을 초기화할 필요가 없다면 init()메소드를 다시 정의할 필요가 없다.

Applet 클래스의 주요 메서드

메소드 이름

메소드 호출 시점

init()

웹 브라우저가 실행되어서 애플릿을 초기화해야 할 때

start()

웹 브라우저가 켜져서 애플릿을 초기화해야 하거나 리로드되어 다시 시작되어야 할 때

stop()

다른 웹 페이지로 이동했기 때문에 애플릿의 작동을 멈추어야 할 때

destroy()

웹 브라우저가 종료되었기 때문에 애플릿도 종료시켜야 할 때

 

이벤트를 간단하게 처리하기
위의 예제를 보면 다섯개의 메소드를 재정의했다. 결과적으로 매우 읽기 어려운 코드가 만들어졌다. 이러한 경우 어댑터(Adapter)라는 클래스를 사용해서 코드를 보다 간결하게 고칠 수 있다.

package practice;

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Practice05 extends Applet{
	int x = 10;
	int y = 10;
	
	public void init()
	{
		addMouseListener(new MouseAdapter() { //MouseAdapter 클래스를 사용하면 쉽게 작성
			
			public void mousePressed(MouseEvent e)
			{
				x = e.getX();
				y = e.getY();
				repaint();
			}
		});
	}
	
	public void paint(Graphics g){
		g.fillOval(x, y, 10, 10);
	}

 

MouseAdapter 클래스를 상속받은 클래스를 애플릿 클래스 안에서 생성해서 사용한다.
이러한 클래스를 '내부 클래스(inner class)'라고 한다.
내부클래스란 선언된 클래스 안에서만 사용되는 간결한 클래스이다.

또한, 이 예제에서는 분명 MouseAdapter 클래스를 상속받은 클래스가 사용되고 있다.
그러나 특이하게도 이 클래스에는 이름이 없다.  이렇게 이름이 없는 내부클래스를
'익명 클래스(anonymous class)' 라고 부른다.
익명 클래스는 이름이 없기 때문에 다른 클래스와 인터페이스를 상속받아야 다룰 수 있다.
익명 클래스 안에서는 상속받는 클래스의 메소드를 오버라이드 한다.
이 예제에서는 MouseAdapter 클래스의 mousePressed()메소드를 오버라이드 했다.

윈도우 구성 요소 사용하기
버튼이나 텍스트, 체크 박스와 같이 그래픽으로 구현된 윈도우 구성 요소가 세트로 마련
이 세트는 AWT(Abstract Window Toolkit)라고 부른다.

 

AWT 예제)

package practice;

import java.applet.Applet;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

// ActionListener 인터페이스를 구현
public class Practice06 extends Applet implements ActionListener {

	Button bt;
	
	public void init()
	{
		bt = new Button("시작"); // 버튼 객체 생성
		add(bt);
		bt.addActionListener(this); // 버튼을 누를 때 발생하는 이벤트를 받아 낼 준비
	}
	
	@Override
	public void actionPerformed(ActionEvent e) { // 버튼이 눌렸을 때 실행시킬 코드 작성
		bt.setLabel("중단");
	}


}

 

애니메이션
애니메이션을 구현할 때에는 스레드를 사용해야 한다. 
애플릿은 일반적으로 Applet 클래스를 상속받아서 만든다.
따라서 Runnable 인터페이스를 구현한 스레드르 만들어야한다.

package practice;

import java.applet.Applet;
import java.awt.Graphics;


// Runaable 인터페이스 구현
public class Practice07 extends Applet implements Runnable {

	int num;
	
	public void init()
	{
		Thread th = new Thread(this);
		th.start();
	}
	
	public void run() {
		try{
			for(int i=0; i<10; i++){
				num = i;
				repaint(); // 화면을 다시 그린다.
				Thread.sleep(1000); //스레드를 1초마다 일시 정지 시킨다.
			}
		}
		catch(InterruptedException e){
			System.out.println("에러 발생");
		}
	}
	
	public void paint(Graphics g) // 화면이 새로 그려질 때 마다 호출된다.
	{
		String str = num + "입니다.";
		g.drawString(str, 10, 10);
	}

	
}

 

강의 요약
● 웹 브라우저에서 동작하는 애플릿을 만들 수 있다.
● 애플릿의 paint() 메소드를 정의하여 화면에 문자나 그래픽 요소를 표시할 수 있다.
● init(), start(), stop(), destory() 메소드를 정의해서, 웹 브라우저의 동작에 맞추어 
   처리를 작성할 수 있다.
● 윈도우 구성요소(AWT)를 애플릿에서 사용할 수 있다.
● 애플릿에서 스레드를 사용한 애니메이션을 구현할 수 있다.

 


문제1)
좌표(20,20)에 "Hello"라는 문자열을 굵게, serif 폰트로, 글자 크기를 20pt, 글자색은 파란색으로 표시하는 애플릿을 작성하십시오.

package practice;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;

public class Practice13 extends Applet{

	public void paint(Graphics g){
		g.setColor(Color.blue);
		g.setFont(new Font("serif", Font.BOLD, 20));
		g.drawString("Hello", 20, 20);
		
	}
	
	
}

 

문제2)
왼쪽 위 모서리 좌표를 (10,10), 폭과 높이는 (100,100)이면서 색으로 채워진 사각형을 그리는 애플릿을 작성하십시오.

package practice;

import java.applet.Applet;
import java.awt.Graphics;

public class Practice14 extends Applet{

	public void paint(Graphics g){
		g.fillRect(10, 10, 100, 100);
	}
}

 

문제3)
마우스로 클릭한 위치에 이미지(Image.gif)를 표시하는 애플릿을 작성하십시오.
단, 마우스로 클릭한 위치에 이미지의 왼쪽 위 모서리가 와야 합니다.

package practice;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import java.applet.Applet;

public class Practice15 extends Applet implements MouseListener{

	Image img;
	int x = 10;
	int y = 10;
	
	public void init(){
		getImage(getDocumentBase(), "Image.gif");
		addMouseListener(this);
	}
	@Override
	public void mouseClicked(MouseEvent e) {
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		x = getX();
		y = getY();
		repaint();
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	
	public void paint(Graphics g){
		g.drawImage(img, x, y, this);
	}

}

 

문제4)
마우스를 애플릿 위에 있을 때 "안녕하세요"란 문구를, 마우스가 애플릿에서 빠져나왔을 때 "안녕"이란 문구를 좌표(10,10)에 출력하십시오.

package practice;

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class Practice16 extends Applet implements MouseListener {

	boolean bl = true;
	
	public void init(){
		addMouseListener(this);
	}
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
			bl = true;
			repaint();
	}

	@Override
	public void mouseExited(MouseEvent e) {
			bl = false;
			repaint();
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void paint(Graphics g){
		if(bl == true){
		g.drawString("안녕하세요", 10, 10);
		}else{
			g.drawString("안녕", 10, 10);
		}
	}
	

}

 

문제5)
예제의 Practice7을 1초마다 문자가 오른쪽으로 10씩 이동하도록 수정하십시오.

package practice;

import java.applet.Applet;
import java.awt.Graphics;


public class Practice17 extends Applet implements Runnable {

	int num;
	int x;
	
	public void init()
	{
		Thread th = new Thread(this);
		th.start();
	}
	
	public void run() {
		try{
			for(int i=0; i<10; i++){
				num = i;
				x = i*10;
				repaint();
				Thread.sleep(1000); 
			}
		}
		catch(InterruptedException e){
			System.out.println("에러 발생");
		}
	}
	
	public void paint(Graphics g) 
	{
		String str = num + "입니다.";
		g.drawString(str, x, 10);
	}

	
}

 

 

     

'4. 프로그래밍 기초 > 4_1 JAVA' 카테고리의 다른 글

[JAVA] 인터페이스 사용 방법  (0) 2018.12.25
[JAVA] 추상화 개념과 예제  (0) 2018.12.23
[JAVA] 상속 개념과 예제  (0) 2018.12.23