728x90
728x90
- 키보드 방향키로 움직이되, 이미지가 창 밖으로 나가지 않도록 함
코드
// 인터페이스 파일 //
public interface Moveable {
void left();
void right();
void up();
void down();
}
------------------------------------
// 클래스 파일 //
public class MoveLabelFrame3 extends JFrame implements Moveable {
private JLabel label;
private int labelX;
private int labelY;
private final int SIZE_X = 800;
private final int SIZE_Y = 800;
public MoveLabelFrame3() {
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setSize(SIZE_X, SIZE_Y);
setDefaultCloseOperation(3);
setResizable(false);
labelX = 300;
labelY = 350;
label = new JLabel(new ImageIcon("images/image4.png"));
label.setSize(250, 250);
}
private void setInitLayout() {
setLayout(null);
label.setLocation(labelX, labelY);
add(label);
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) {
}
});
}
@Override
public void left() {
int x = labelX;
int y = labelY;
if (x > 0) {
x = labelX -= 40;
}
label.setLocation(x, y);
}
@Override
public void right() {
int x = labelX;
int y = labelY;
int xMax = SIZE_X - label.getWidth();
if (x < xMax) {
x = labelX += 40;
}
label.setLocation(x, y);
}
@Override
public void up() {
int x = labelX;
int y = labelY;
// 왼쪽 위가 (0, 0)라서 -해야 위로 올라감
if (y > 0) {
y = labelY -= 40;
}
label.setLocation(x, y);
}
@Override
public void down() {
int x = labelX;
int y = labelY;
int yMax = SIZE_Y - label.getHeight();
if (y < yMax) {
y = labelY += 40;
}
label.setLocation(x, y);
}
public static void main(String[] args) {
new MoveLabelFrame3();
}
}
실행
- 뚝뚝 끊기지 않고 자연스럽게 움직이려면 '쓰레드'를 생성해서 사용해야 함
320x100
반응형
'Java > Swing (GUI)' 카테고리의 다른 글
[Java/Swing] 로또 게임 구현 (0) | 2023.02.19 |
---|---|
[Java/Swing] 윤년 계산기 구현 (0) | 2023.02.18 |
[Java/Swing] MouseListener - 컴포넌트 이동시키기 (0) | 2023.02.18 |
[Java/Swing] ActionListener - 배경 색 변경하기 (1) | 2023.02.18 |
[Java/Swing] 메서드 및 함수 모음 (1) | 2023.02.17 |