쓰레드를 이용한 움직이는 펭귄 소스에서(지나와 함께하는 자바에 실린 소스입니다.)


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]

글쓴이 :초보자 2000년 5월 08일 12:47:29


import java.awt.*;
import java.awt.event.*;


class MovePenguin extends Frame implements ActionListener, Runnable{


final int pace=2;
Image bgImg=getToolkit().getImage("images/jordan.jpg");
Image penguin[]=new Image[3];
int currentImg=0;
Point point=new Point();
boolean isMoving=false;



MovePenguin(String title){
super(title);


penguin[0]=getToolkit().getImage("images/penguin1.gif");
penguin[1]=getToolkit().getImage("images/penguin2.gif");
penguin[2]=getToolkit().getImage("images/penguin3.gif");

addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
dispose();
System.exit(0);
}
});



Button button=new Button("Action");
button.addActionListener(this);
add(button, "South");

doLayout();
setSize(300,500);
setVisible(true);
}


public static void main(String args[]){
new MovePenguin("MovePenguin");
}


public void actionPerformed(ActionEvent ae){
String cmd=ae.getActionCommand();
if(cmd.equals("Action")){
new Thread(this).start();
}
}


public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
Dimension dim=getSize();
g.drawImage(bgImg,0,0,dim.width, dim.height, this);


if(isMoving)
g.drawImage(penguin[currentImg],point.x, point.y, this);
}
public synchronized void run(){
isMoving=true;
Dimension dim=getSize();
point.x=-penguin[0].getWidth(this);
//여기에서 point.x-=penguin[0].getWidth(this);
// 한 것과의 차이점은 무엇인지요?
// 교재에서는 위의 방법대로 나왔는데
//저는 아래방법처럼 했는데 Action버튼을 두번 누르니 두번째로 나오는 펭퀸은
// 화면의 오른쪽 끝부분에서 튀어나와서 금방 들어가 버리더군요.
//물론 책에서 나온대로 하면 화면 왼쪽부터 나와서 오른쪽으로 들어갑니다.
//이 두가지의 차이점은 무엇입니까?



point.y=dim.height/2;


while(point.x<dim.width){
try{
Thread.currentThread().sleep(50);
}catch(InterruptedException ie){}
point.x=+pace;
currentImg=(++currentImg)%3;
repaint();
}
isMoving=false;
}
}





다음 글들:



이어서 글올리기(답하기)

이름:
E-Mail:
제목:
내용:
HTML 태그 포함 여부: HTML 문서일 경우 체크
관련 URL(선택):
URL 제목(선택):
관련 이미지 URL:


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]