애플릿
웹 브라우저 환경에서 동작하는 작은 프로그램
애플릿 클래스
애플릿을 작성하려면 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 |