결국 무엇이든 해내는 사람

Day 15 - frame 응용, 도형그리기 ,움직이기 본문

두서없는 공부 노트/JAVA

Day 15 - frame 응용, 도형그리기 ,움직이기

kkm8257 2020. 9. 3. 19:54
반응형
package frame_Random_ball;

import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
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);
		
		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;

public class Main {

	
	public static void main(String[] args) {
		
		//원이 왓다리갔다리 쓰레드 활용
		Control ct= new Control();
		
		
		
	}
	
}
package frame_Random_ball;

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 {

	int posX = 0;
	int posY = 0;
	int speedX = 8;
	int speedY = 15;
	MoveLeftRight th;

	Image bufferImage;
	Graphics buffg;

	public MyCanvas(int posX,int posY) {

		
		this.posX =posX;
		this.posY=posY;
		
		th = new MoveLeftRight();
		th.start();
	}

	@Override
	public void paint(Graphics g) {
		if (buffg == null) {
			bufferImage = createImage(getWidth(), getHeight());

			if (bufferImage == null)
				System.out.println("생성 실패");
			else
				buffg = bufferImage.getGraphics();
		}

//		g2.fillOval(posX, 300, 50, 50);
	}

	@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(this.posX, this.posY, 50, 50);

//		buffg.fillOval(100, 100, 50, 50);

		g.drawImage(bufferImage, 0, 0, this); // 버퍼에있는거 그려주기
	} // 43번쨰 줄부터 52번쨰줄은 껌뻑거림을 없애기위한 코드 , 이해할 필요는 없고 buffg 변수 뒤에 세팅값은
	// 기존의 canvas 그리듯 사용하면 됨. 실제로 깜빡거림 방지는 요즘 기술에는 구현되어있어서 굳이 깊게 안봐도댐

	class MoveLeftRight extends Thread {

		// 좌우 왓다리 갔다리 , 숫자는 프레임창의 크기 값 - 동그라미크기(50) 을 뺴준값
		@Override
		public void run() {

			while (true) {

				posX += speedX;
				posY+=speedY;
				if (posX > getWidth() - 50 || posX < 0) {

					speedX *= -1;
				}
				if (posY> getHeight() - 50 || posY < 0) {

					speedY *= -1;
				}

				repaint();

				try {
					Thread.sleep(5);
				} catch (Exception e) {
					System.out.println(e);
				}

			}

		}

	}

}
반응형
Comments