전체 코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | package ch05; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class ImageMove extends JFrame implements Movable { private JLabel imageLabel; private int labelImageX; private int labelImageY; public ImageMove() { initData(); setInitLayout(); addEventListener(); labelImageX = 300; labelImageY = 300; } private void initData() { setSize(800, 800); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); imageLabel = new JLabel(new ImageIcon("images/image2.png")); imageLabel.setSize(200, 200); } private void setInitLayout() { add(imageLabel); setLayout(null); imageLabel.setLocation(300, 300); setVisible(true); } private void addEventListener() { this.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { // 현재 이벤트가 일어난 시점에 x, y 좌표값을 확인 // int currentX = labelText.getX(); // int currentY = labelText.getY(); if (e.getKeyCode() == KeyEvent.VK_RIGHT) { right(); } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { left(); } else if (e.getKeyCode() == KeyEvent.VK_UP) { up(); } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { down(); } } @Override public void keyPressed(KeyEvent e) { } }); } @Override public void left() { if (0 < labelImageX) { int x = labelImageX -= 30; int y = labelImageY; imageLabel.setLocation(x, y); } } @Override public void right() { if (600 > labelImageX) { int x = labelImageX += 30; int y = labelImageY; imageLabel.setLocation(x, y); } } @Override public void up() { if (-10 < labelImageY) { int x = labelImageX; int y = labelImageY -= 30; imageLabel.setLocation(x, y); } } @Override public void down() { if (550 > labelImageY) { int x = labelImageX; int y = labelImageY += 30; imageLabel.setLocation(x, y); } } public static void main(String[] args) { new ImageMove(); } } | cs |
1 2 3 4 5 6 7 8 | package ch05; public interface Movable { void left(); void right(); void up(); void down(); } | cs |
코드 설명
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | package ch05; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class ImageMove extends JFrame implements Movable { private JLabel imageLabel; private int labelImageX; private int labelImageY; public ImageMove() { initData(); setInitLayout(); addEventListener(); labelImageX = 300; labelImageY = 300; } private void initData() { setSize(800, 800); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); imageLabel = new JLabel(new ImageIcon("images/image2.png")); imageLabel.setSize(200, 200); } private void setInitLayout() { add(imageLabel); setLayout(null); imageLabel.setLocation(300, 300); setVisible(true); } private void addEventListener() { this.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_RIGHT) { right(); } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { left(); } else if (e.getKeyCode() == KeyEvent.VK_UP) { up(); } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { down(); } } @Override public void keyPressed(KeyEvent e) { } }); } } | cs |
→ 멤버변수 선언부 :
JLabel을 선언하여 이미지를 넣을 수 있도록 한다.
labelImageX와 labelImageY를 선언하여 이미지를 움직일 때 사용하는 변수로 선언한다.
→ 생성자 :
initData(), setInitLayout(), addEventListener()를 호출하고 labelImageX와 labelImageY의 고정좌표를 300 300으로 주었다.
→ initData() :
창 크기를 너비 : 800, 높이 : 800으로 주었다.
setDefaultCloseOperation을 사용하여 창을 끄면 종료가 되게끔 설정하였다.
JLabel에 ImageIcon을 생성하여 이미지를 imageLabel 변수에 저장하고 사이즈를 너비 : 200, 높이 200으로 주었다.
→ setInitLayout() :
add()를 사용하여 imageLabel을 넣고 창에 이미지가 나오게끔 하고, setLayout(null)로 하여 좌표값을 300, 300 주었다.
setVisible(true)를 사용해서 창을 띄운다.
→ addEventListener() :
익명함수를 사용하여 KeyListener()를 생성해 KeyReleased 메서드에서 e.getKeyCode가 KeyEvent.VK_"원하는 방향"과 같으면 인터페이스 사용하여 구현한대로 나오게끔 하였다.
인터페이스 구현부분
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package ch05; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class ImageMove extends JFrame implements Movable { @Override public void left() { if (0 < labelImageX) { int x = labelImageX -= 30; int y = labelImageY; imageLabel.setLocation(x, y); } } @Override public void right() { if (600 > labelImageX) { int x = labelImageX += 30; int y = labelImageY; imageLabel.setLocation(x, y); } } @Override public void up() { if (-10 < labelImageY) { int x = labelImageX; int y = labelImageY -= 30; imageLabel.setLocation(x, y); } } @Override public void down() { if (550 > labelImageY) { int x = labelImageX; int y = labelImageY += 30; imageLabel.setLocation(x, y); } } public static void main(String[] args) { new ImageMove(); } } | cs |
→ if문을 사용하여 왼쪽(X좌표)과 위쪽(Y좌표)은 좌표가 0, -10이 되기 전까지 화면 밖을 벗어나지 않도록 구현하였고, 오른쪽과 밑쪽은 getX() , getY() 메소드를 사용하여 벗어나지 않을 만큼의 좌표를 지정해주었다.
→ 오른쪽으로 이동은 +=30씩, 왼쪽으로 이동은 -=30씩, 위쪽으로 이동은 +=30씩, 아래쪽으로 이동은 -=30씩 구현하였다.
오른쪽, 왼쪽은 labelImageX에 가감하여야 하고 위쪽, 아래쪽은 labelImageY에 가감하여야 한다 !!!!
결과화면
'프로그래밍 > Java' 카테고리의 다른 글
Java_컬렉션 프레임워크 (0) | 2023.02.21 |
---|---|
Java_Thread (0) | 2023.02.17 |
Java_예외처리 (0) | 2023.02.16 |
Java_추상 클래스(abstract class) (0) | 2023.02.14 |
Java_Object클래스 (0) | 2023.02.14 |