584
No
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();
}
}
댓글 ( 4)
댓글 남기기