자바

 

class KeyEventTest

 

 

package java10;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.ScrollPane;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class KeyEventTest extends JFrame implements KeyListener{

	JPanel panel;
	JTextField field;   //single line(1줄만 입력 가능)
	JTextArea area;  //multi line(여러줄 입력 가능)
	
	public KeyEventTest() {
		
		panel =new JPanel(new GridLayout(0, 2));
		panel.add(new JLabel("문자를 입력하세요."));
		field=new JTextField(10);//텍스트필드 
		panel.add(field);//패널에 텍스트필드 추가
		
		area=new JTextArea(3, 30);		//3행 30열
		// 폰트 사이즈 조절
		area.setFont(area.getFont().deriveFont(15f));
		
		
		//스크롤 기능 추가
		JScrollPane scrollPane =new JScrollPane();
		panel.add(scrollPane);//패널에 스크롤페인 추가
		// 스크롤페인의 뷰포트에 TextArea 를 설정
		scrollPane.setViewportView(area);
		
		add(panel, BorderLayout.NORTH);// panel 을 North 추가 
		add(scrollPane, "Center");// 스크롤페인을 Center 추가
			
		
		setSize(400, 200);// 프레임의 크기 설정(가로, 세로)
		setVisible(true);// 프레임을 표시
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 프레임의 닫기 동작
			
		
		//이벤트 처리
		//텍스트필드에 
		
		field.addKeyListener(this);
	}
	
	
	public static void main(String[] args) {
		new KeyEventTest();
	}

	
	
 //누르고 떼는 동작
	@Override
	public void keyTyped(KeyEvent e) {
		
		display(e, "keyTyped");
	}

	//키를 누를 때
	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		display(e, "keyPressed");
	}

    //손가락을 뗄 때
	@Override
	public void keyReleased(KeyEvent e) {
		display(e, "keyReleased");
		
	}
	
	
	void display(KeyEvent e, String s){
		char c =e.getKeyChar(); //입력한 문자
		int keyCode =e.getKeyCode(); // 입력한 키코드값
		//alt, ctrl, shift 키를 누른 경우
		String modifiers="Alt:"+ e.isAltDown()
			+" Ctrl :" +e.isControlDown()
			+ " Shift :"+ e.isShiftDown();
		area.append(s+"문자 : " + c+ "( 코드 : "+ keyCode + " )" +modifiers + "\n" );
	}
	
	
	
}




 

 

 

class YunaTest 

 

 

 

package java10;

import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

class MyPannel extends JPanel{
	BufferedImage img=null; //버퍼처리된 이미지 객체
	int img_x =100, img_y=100; //이미지의 좌표값
	int imgWidth, imgHeight; //이미지의 가로, 세로 길이
	
	
	public MyPannel() {
		//new File("파일 또는 디렉토리")
		//alt + 화살표키 => 코드 이동
		try{
			img=ImageIO.read(new File("1.gif"));
			/*imgWidth =img.getWidth();
			imgHeight=img.getHeight();*/
			imgWidth=100;
			imgHeight=100;
		}catch(Exception e){
			System.out.println("no image");
			System.exit(1);// 프로그램 강제 종료
		}
		
		//키이벤트 처리
		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) {
				int keycode=e.getKeyCode();
			    switch (keycode) { //키코드에 따라 좌표 변경
			    	
			    	case KeyEvent.VK_UP: 
			    		//img_y -=10;
			    		img_y =Math.max(0,  img_y-10); //둘 중 큰 값
			    		break;
			    	case KeyEvent.VK_DOWN:
			    		//img_y +=10;
			    		img_y =Math.min(getHeight()-imgHeight, img_y+10);
			    		break;
			    	case KeyEvent.VK_LEFT: 
			    		//img_x -=10;
			    		img_x=Math.max(0, img_x-10);
			    		break;
			    	case KeyEvent.VK_RIGHT: 
			    		//img_x +=10;
			    		img_x =Math.min(getWidth()-imgWidth, img_x+10);
			    		break;
			    	
				}
			    //화면 갱신 요청 => paintComponent()가 호출됨
				repaint();
			}
			
		} );
		requestFocus();//키 입력을 받을 수 있는 상태로 설정
		setFocusable(true); //키 입력을 위한 포커스 설정
	}
	
	
	@Override
	protected void paintComponent(Graphics g) {
		// TODO Auto-generated method stub
		super.paintComponent(g);
		//패널의 가로 세로 사이즈
		System.out.println(getWidth()+"," + getHeight());
		//이미지 가로, 세로 사이즈
	
		g.drawImage(img,  img_x, img_y, imgWidth, imgHeight, null);
		System.out.println(img.getWidth() + " : " +img.getHeight());
		//g.drawImage(img, img_x , img_y, null);
	}
	
}

public class YunaTest extends JFrame{

	public YunaTest(){
		
		setSize(500, 500);//프레임의 가로, 세로 길이 설정
		// 프레임 닫기 설정
		
		//프레임에 패널 추가
		add(new MyPannel());
				
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		setVisible(true);//프레임을 화면에 표시
	}
	
	 
	public static void main(String[] args) {
		new YunaTest();
	}
	
	
}

 

 

 

class MyFrame 

 

package java10;

import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

//마우스 이벤트
//MouseListener 인터페이스 (클릭) => MouseEvent 클래스
//MouseMotionListener(드래그)

public class MyFrame extends JFrame  {
	
	class MyPanel extends JPanel implements Runnable { //내부클래스로 작성
		BufferedImage img=null;
		int img_x, img_y;
		int imgWidth=50;
		int imgHeight=50;
		int mx=5, my=3 ; //x, y 이동값
		
		
		public MyPanel() {
			try {
				//이미지 파일을 로딩(파일 처리 => 반드시 예외 처리)
				img =ImageIO.read(new File("1.gif"));
			} catch (Exception e) {
				e.printStackTrace();
			}
	
			//마우스 이벤트 처리
/*			addMouseListener(new MouseListener() {
				
				//손가락을 떼는 동작
				@Override
				public void mouseReleased(MouseEvent e) {
				
				}
				
				//누름
				@Override
				public void mousePressed(MouseEvent e) {
					
				}
				
				//영역 밖으로 갈때
				@Override
				public void mouseExited(MouseEvent e) {
				}
				
				//영역 안으로 들어갈 때
				@Override
				public void mouseEntered(MouseEvent e) {
					
				}
				
				//press + release
				@Override
				public void mouseClicked(MouseEvent e) {
					img_x=e.getX();// 클릭한 위치의 x 좌표
					img_y=e.getY();// 클릭한 위치의 y 좌표
					repaint();//화면 갱신 요청
				}
			});
*/			
			
			
			//Adapter : Listener 인터페이스의 기본 메소드를 완성시킨 클래스
		  // 필요한 method 만 작성하면 됨(코딩량 절감)		
			  addMouseListener(new MouseAdapter() {
				  
					  @Override
					public void mouseClicked(MouseEvent e) {
							img_x=e.getX();// 클릭한 위치의 x 좌표
							img_y=e.getY();// 클릭한 위치의 y 좌표
						//	repaint();//화면 갱신 요청
							
							System.out.println( "click :"  +  img_x+ ", " + img_y);
					 }
			  });
			  
			  
//			  addMouseMotionListener(new MouseMotionListener() {
//				
//				@Override
//				public void mouseMoved(MouseEvent e) {
//					img_x=e.getX();// 클릭한 위치의 x 좌표
//					img_y=e.getY();// 클릭한 위치의 y 좌표
//				//	repaint();//화면 갱신 요청
//					
//					System.out.println( "Move :"  +  img_x+ ", " + img_y);
//				}
//				
//				@Override
//				public void mouseDragged(MouseEvent e) {
//					// TODO Auto-generated method stub
//					
//				}
//				
//				
//				
//			});
			  
			  
			  Thread th =new Thread(this);
			  th.start();
		}
		
		
		@Override
		protected void paintComponent(Graphics g) {
			// TODO Auto-generated method stub
			super.paintComponent(g);
	
			g.drawImage(img, img_x, img_y, imgWidth, imgHeight, null);
		}
		
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			int i=0;
			while(true){
				//if(i==100)break;
				
				img_x +=mx;
				img_y +=my;
				
				if(img_x > getWidth() - imgWidth || img_x <0){
					mx = -mx;
				}
				if(img_y > getHeight() - imgHeight|| img_y<0){
					my =-my;
				}
				
				try{
					Thread.sleep(30);
				}catch (Exception e) {
					e.getStackTrace();
				}
				
				repaint();
			}
			
		}
		
		
	}

	
	
	
	public MyFrame() {
		add(new MyPanel());
		setSize(500, 500); // 프레임의 사이즈 설정
		setVisible(true); // 프레임을 표시
		setDefaultCloseOperation(EXIT_ON_CLOSE); //닫기 동작 정의
	}
	
	public static void main(String[] args) {
		new MyFrame();
		
	}


}






 

 

 

class Scribble

 

 

package java10;

import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.crypto.SecretKeyFactorySpi;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Scribble extends JFrame{

	
	class Point{ //좌표값 저장
		int x, y;
	}
	
	class MyPanel extends JPanel implements MouseMotionListener{
		int index =10;
		Point[] array =new Point[1000];
		public MyPanel(){
			
			//패널에 마우스 이벤트를 붙임, this : 이벤트 핸들러는 현재 클래스
			addMouseMotionListener(this);
		}
		
		@Override
		protected void paintComponent(Graphics g) {
			// TODO Auto-generated method stub
			super.paintComponent(g);
			for(Point p : array){ //모든 좌표값 반복 처리
				if(p!=null){
					// 사각형 그리기(x, y , width, height)
					g.drawRect(p.x, p.y, 1, 1);
				}
			}
		}

		@Override
		public void mouseDragged(MouseEvent e) {
			int x=e.getX();//마우스의 현재  x좌표
			int y=e.getY();// 마우스의 현 y좌료
			if(index >1000)return; //좌표를 1000개만 저장
			array[index]=new Point();
			array[index].x=x;
			array[index].y=y;
			index++;//배열의 인덱스값 증가 처리
			repaint();// 화면을 새로 그림
		}

		@Override
		public void mouseMoved(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}		
	}
	
	public Scribble() {
		add(new MyPanel()); //생성자 호출, paintComponect() 호출
		
		setSize(300, 300);
		setTitle("마우스 그림그리기");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	
	public static void main(String[] args) {
		new Scribble();
	}
	
}

 

 

 

 

 

 

 

 

java

 

about author

PHRASE

Level 60  머나먼나라

Eyes are more eloquent than lips. (눈은 입보다 능변하다. = 더 풍부하게 감정을 표현한다).

댓글 ( 4)

댓글 남기기

작성