본문으로 바로가기

다양한 애플릿

category 프로그래밍/java 2017. 9. 19. 00:20

선 그리기


Graphics 클래스 이용


Sample2 선그리기

import java.applet.Applet;

import java.awt.Graphics;


public class Sample2 extends Applet {


public void paint(Graphics g) {

// TODO Auto-generated method stub

g.drawLine(10, 10, 100, 100);

}


}


drawLine()메소드는 지정된 2개의 좌표
(10,10) - (100,100) 사이에 선을 그리는 작업을 수행한다. 


색상과 폰트 변경하기


import java.awt.Color;

g.setcolor(Color.red); 색상을 빨간색으로 변경한다.

g.drawLine(10,10,100,100); 빨간 선이 그려진다.



import java.awt.Font;


g.setFont(new Font("serif" , Font.BOLD, 24)); 폰트이름 : serif, 폰트스타일 굵게, 폰트 크기 24pt

g.drawString("Hello" , 20 , 20); 지정한 폰트로 표시



이미지 표시하기


이번에는 Gragphics클래스의 메소드를 이용하여 애플릿에 이미지를 표시해 보겠다. 

image.gif라는 gif이미지 파일을 만들고 저장하라. 


import java.applet.Applet;


import java.awt.Graphics;


import java.awt.Image;




public class Sample3 extends Applet


{

    

Image img;

    


public void init()  웹 브라우저가 켜진 후 , 애플릿이 실행될때 처음 한 번만 자동으로 호출되는 클래스

    

{

         

img = getImage(getDocumentBase(),"Image.gif"); getlmage라는 메소드 호출하여 이미지를 불러온다. 

    

}

    


public void paint(Graphics g)

    

{

        

g.drawImage(img, 10, 10, this);

    

}


}




애플릿 동작 이해하기


 메소드 이름

메소드 호출 시점 

init() 

웹 브라우저가 실행되어서 애플릿 초기화 

 start()

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

stop() 

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

 destroy()

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



마우스에 반응하게 만들기


애플릿은 사용자가 마우스를 눌렀다라는 사건을 받아서 처리할 수 있다. 이를 일컬어 이벤트 처리라고 부른다. 


Sample4.java

import java.applet.Applet;

import java.awt.Graphics;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;


public class Sample4 extends Applet implements MouseListener MouseListener 인터페이스 구현

{

int x = 10;

int y = 10;

public void init()

{

addMouseListener(this); 이벤트 받을 준비를 한다. 

}

@Override 다섯개 메소드 정의

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

}


@Override  

public void mousePressed(MouseEvent e) {  마우스가 눌러졌을때 이 메소드가 호출된다. 

// TODO Auto-generated method stub

x = e.getX(); 마우스가 눌려진 좌표를 조사한다. 

y = e.getY();

repaint();  애플릿 화면을 다시 그린다. 

}


@Override

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

}


@Override

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

}


@Override

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

}

public void paint(Graphics g)

{

g.fillOval(x, y, 10, 10); 타원을 그린다. 

}

}


애플릿을 작성하려면 MouseListener 인터페이스를 구현하고 그다음, addMouseListener()메소드를 호출한다. 이제 이 애플릿은 

마우스가 눌려졌다는 이벤트를 받아서 처리할 준비가 되었다. 

그런다음, 마우스가 움직일 대 호출 되는 5개의 메소드를 정의했다. 이 예제에서는 그 중 mousePressed()메소드에서 마우스 버튼이 눌렀을 때 처리를 구현한다. 

그러면 실제로 애플릿 화면에서 마우스 버튼을 누르면 MouseEvent 클래스 객체가 전달되면서 메소드가 호출된다. 

전달받은 객체의 geX(), getY() 메소드를 통해서 마우스가 눌려진 좌표를 조사한다. 

그리고 repaint()라는 메소드를 호출하면 그 메소드는 다시 paint()메소드를 호출한다. 실제 애플릿 화면이 그려진다. 이 예제에서는 마우스를 누룰때 마다 원을 그렷다. 


이벤트 간결하게 처리하기


Sample4에서 mouseListener 인터페이스를 구현하려면 반드시 다섯개의 메소드를 재정의 해야 한다. 

결과적으로 매우 읽기 어렵다. 

이러한 경우 어댑터(adapter)라는 클래스를 사용해서 보다 간결하게 고칠 수 있다. 

마우스의 경우 MouseAdapter라는 클래스를 사용할 수 있다.


import java.applet.Applet;

import java.awt.Graphics;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;


public class Sample5 extends Applet{


int x = 10;

int y = 10;

public void init()

{

addMouseListener(new 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)라고 부른다. 

내부 클래스란 선언된 클래스안에서만 사용


윈도우 구성 요소 사용하기


구성요소명 

클래스명 

버튼 

Button 

체크 박스 

Checkbox 

선택 박스 

Choice 

라벨 

Label 

리스트 

List 

텍스트 필드 

TextField 

. . .


Sample6.java

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;


public class Sample6 extends Applet implements ActionListener { ActionListener 인터페이스 구현

Button bt;

public void init()

{

bt = new Button("시작"); 버튼 객체 생성

add(bt);

bt.addActionListener(this); 버튼을 누를때 발생하는 이벤트를 받아 낼 준비를 한다. 

}



@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

bt.setLabel("중단"); 버튼이 눌렀을 때 실행시킬 준비를 한다. 

}


}



애니메이션 보여주기


Runnable 인터페이스를 상속해서 스레드 생성


import java.applet.Applet;

import java.awt.Graphics;


public class Sample7 extends Applet implements Runnable {

int num;

public void init()

{

Thread th;

th = new Thread(this);

th.start();

}

@Override

public void run() { 스레드를 1초마다 정지

// TODO Auto-generated method stub

try {

for(int i = 0; i<10; i++)

{

num = i;

repaint(); 화면을 다시 그린다. 

Thread.sleep(1000); 스레드를 1초마다 일시 정지

}

}

catch(InterruptedException e) {

}

}

public void paint(Graphics g) 화면이 새로 그려질 때 마다 호출

{

String str = num + "입니다.";

g.drawString(str, 10, 10);

}


}


이 과정이 10번 반복되며 반복값을 num에 대입한 다음, paint()메소드 안에 표시한다. 그 결과 숫자가 1초마다 바뀌는 애니메이션이 구현된다. 

'프로그래밍 > java' 카테고리의 다른 글

java 네트워크  (1212) 2017.09.21
컬렉션  (1214) 2017.09.19
애플릿(애플릿, 애플릿 뷰어)  (1194) 2017.09.16
동기화  (1036) 2017.09.15
쓰레드 생성,동기화  (1202) 2017.09.14