Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 안드로이드스튜디오
- Dispathcher Servlet이란
- Bean Factory란
- Spring Handler
- Servlet Life Cycle
- Spring Servlet이란
- Spring Container란
- elasticSearch
- Java
- 안드로이드
- ContextLoaderListener란
- ApplicationContext란
- spring 장점
- H2 DB
- 동의어 파일
- 자바
- ElasticSearch EdgeNGram
- ElasticSearch NGram
- Servlet과 Thread
- 계산기
- H2
- ElasticSearch Shingle
- Servlet Container란
- ElasticSearch 토큰필터
- ElasticSearch 동의어 사전
- ElasticSearch 동의어 파일
- 토큰필터
- layout
- Servlet 멀티 스레딩
- 인텔리제이
Archives
- Today
- Total
결국 무엇이든 해내는 사람
Day 15 - frame응용, 방향키로 공 움직이기 본문
반응형
package frame_Random_ball_ArrowMove;
import java.awt.Color;
public class Ball {
private int posX ;
private int posY ;
private int speedX ;
private int speedY ;
private int size;
private Color color;
public Ball(int posX, int posY, int speedX, int speedY, int size, Color color) {
super();
this.posX = posX;
this.posY = posY;
this.speedX = speedX;
this.speedY = speedY;
this.size = size;
this.color = color;
}
public void setPosX(int posX) {
this.posX = posX;
}
public void setPosY(int posY) {
this.posY = posY;
}
public int getPosX() {
return posX;
}
public void setSpeedX(int speedX) {
this.speedX = speedX;
}
public void setSpeedY(int speedY) {
this.speedY = speedY;
}
public int getPosY() {
return posY;
}
public int getSpeedX() {
return speedX;
}
public int getSpeedY() {
return speedY;
}
public int getSize() {
return size;
}
public Color getColor() {
return color;
}
public void move() {
//객체지향에서 움직임은 메소드로 만들고
//필드는 생성자로
posX+=speedX;
posY+=speedY;
}
}
package frame_Random_ball_ArrowMove;
public class Main {
public static void main(String[] args) {
//원이 왓다리갔다리 쓰레드 활용
Control ct= new Control();
}
}
package frame_Random_ball_ArrowMove;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class Control {
public Control() {
Frame fr=new Frame();
setLayout(fr);
MyCanvas cv = new MyCanvas(100,100);
cv.setSize(600,600);
cv.setLocation(0,0);
cv.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println(e.getKeyCode());
//좌 37 상 38 우 39 하 40
switch (e.getKeyCode()) {
case 37 :
System.out.println("좌");
cv.ball.setPosX(cv.ball.getPosX()-10);
break;
case 38 :
System.out.println("상");
cv.ball.setPosY(cv.ball.getPosY()-10);
break;
case 39 :
System.out.println("우");
cv.ball.setPosX(cv.ball.getPosX()+10);
break;
case 40 :
System.out.println("하");
cv.ball.setPosY(cv.ball.getPosY()+10);
break;
}
}
});
fr.add(cv);
fr.setVisible(true);
}
public void setLayout(Frame frame) {
//중앙에 위치
Dimension res = Toolkit.getDefaultToolkit().getScreenSize();
System.out.println("해상도 : " + res.width + " x " + res.height);
int frame_width = 600;
int frame_height = 600;
frame.setSize(frame_width, frame_height);
frame.setLocation(res.width / 2 - frame_width / 2, res.height / 2 - frame_height / 2);
frame.setLayout(null);
//
frame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
});
}
}
package frame_Random_ball_ArrowMove;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
public class MyCanvas extends Canvas {
Image bufferImage;
Graphics buffg;
//객체 지향적으로 재설계
MoveLeftRight th1;
Ball ball;
public MyCanvas(int posX,int posY) {
ball=new Ball(100,100,5,8,50,Color.BLACK);
th1=new MoveLeftRight();
th1.start();
}
@Override
public void paint(Graphics g) {
if (buffg == null) {
bufferImage = createImage(getWidth(), getHeight());
if (bufferImage == null)
System.out.println("생성 실패");
else
buffg = bufferImage.getGraphics();
}
}
@Override
public void update(Graphics g) {
buffg.drawImage(bufferImage, 0, 0, this);// 버퍼세팅
//
buffg.setColor(new Color(41, 128, 185));
buffg.fillRect(0, 0, getWidth(), getHeight());
//
buffg.setColor(Color.red);
buffg.fillOval(ball.getPosX(), ball.getPosY(), ball.getSize(), ball.getSize());
g.drawImage(bufferImage, 0, 0, this); // 버퍼에있는거 그려주기
} // 43번쨰 줄부터 52번쨰줄은 껌뻑거림을 없애기위한 코드 , 이해할 필요는 없고 buffg 변수 뒤에 세팅값은
// 기존의 canvas 그리듯 사용하면 됨. 실제로 깜빡거림 방지는 요즘 기술에는 구현되어있어서 굳이 깊게 안봐도댐
class MoveLeftRight extends Thread {
// 좌우 왓다리 갔다리 , 숫자는 프레임창의 크기 값 - 동그라미크기(50) 을 뺴준값
@Override
public void run() {
while (true) {
repaint();
try {
Thread.sleep(5);
} catch (Exception e) {
System.out.println(e);
}
}
}
}
}
반응형
'두서없는 공부 노트 > JAVA' 카테고리의 다른 글
Java - queue 구현하기 (0) | 2021.03.01 |
---|---|
Java - stack 구현하고 테스트하기 (0) | 2021.03.01 |
Day 15 - frame을 더 응용해서 , 공을 여러개 돌려보기 (0) | 2020.09.03 |
Day 15 - frame 응용, 도형그리기 ,움직이기(객체지향적 설계) (0) | 2020.09.03 |
Day 15 - frame 응용, 도형그리기 ,움직이기 (0) | 2020.09.03 |
Comments