import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DirectionPanel extends JPanel
{
private final int WIDTH = 300, HEIGHT = 300;//패널 크기.
private final int JUMP = 10; // increment for image movement
private final int IMAGE_SIZE = 31;
private ImageIcon up, down, right, left, currentImage;//아이콘 인스턴스 변수.
private int x, y;//좌표값.
//constructor
public DirectionPanel()
{
addKeyListener (new DirectionListener());
x = WIDTH / 2;//좌표 지정.
y = HEIGHT / 2;
up = new ImageIcon (arrowUp.gif);//해당 아이콘에 대한 변수 지정.
down = new ImageIcon (arrowDown.gif);
left = new ImageIcon (arrowLeft.gif);
right = new ImageIcon (arrowRight.gif);
currentImage = right;//디폴트 아이콘은 right모양.
setBackground (Color.black);//배경색과 패널 크기.
setPreferredSize (new Dimension(WIDTH, HEIGHT));
setFocusable(true);//키보드를 눌렀을 때 화면에 표시하게 해줌.
}
public void paintComponent (Graphics page)
{
super.paintComponent (page);
currentImage.paintIcon (this, page, x, y);
}
//리스너 등록.키보드가 눌려졌을 때.
private class DirectionListener implements KeyListener
{
public void keyPressed (KeyEvent event)
{
switch (event.getKeyCode())
{
case KeyEvent.VK_UP://방향키가 위를 가르키면
currentImage = up;//up아이콘이 작동.
y -= JUMP;//y좌표값이 감소하면서 위로 이동한다.
break;
case KeyEvent.VK_DOWN://방향키가 아래를 가르키면
currentImage = down;//down아이콘이 작동.
y += JUMP;//y좌표값은 증가하면서 아래로 이동.
break;
case KeyEvent.VK_LEFT://방향키가 왼쪽을 가르키면
currentImage = left;//left아이콘이 작동
x -= JUMP;//x좌표값을 감소시키면서 왼쪽으로 이동.
break;
case KeyEvent.VK_RIGHT://방향키가 오른쪽을 가르키면
currentImage = right;//right아이콘이 작동하면서 x값을 증가시키고 오른쪽으로 이동.
x += JUMP;
break;
}
repaint();//왼쪽,오른쪽... 등등이 눌러진 후 다른 키가 눌려지면 화면을 다시 표시한다.
}
//사용하지 않는 비어있는 값들을 정의해줌.
public void keyTyped (KeyEvent event) {}
public void keyReleased (KeyEvent event) {}
}
}이 소스에서....방향키를 누르면 화살표(정해진 이미지 아이콘을 불러와서 위,아래,좌,우)가
작동하여 움직이게 되는데 화살표가 패널 밖으로 나가는 것을 허락하지 못하게 하는 방법이
있나요? 힌트좀 주세요. 이것저것 찾아봐도 못찾겠어요....
풋내 2026.07.20
하~제가 너무 어렵게 생각을 했나봐요.
괜히 이곳저곳에서 for문 돌리는 바람에.-_-;;; 감사합니다.
들찬길 2026.07.20
--; x,y 가 패널 크기 안넘어 가면 되네요...
x-=JUMP; = x = x WIDTH ? x : x-JUMP ;
y 도 같은 방법으로...