반응형
상태 변경이 일어나면 그림을 다시 그려주어야 한다.
상태 변경만 일어났을 때
그림을 다시 그려주지 않으면
상태가 변경된 채
원래 그림 그대로 그려져 있기 때문이다.
package site.metacoding.bubble.ex02;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
/**
*
* @author jjjjj 목적 : 배경화면 설정, 캐릭터 추가
*
*/
public class BubbleFrame extends JFrame {
private JLabel backgroundMap;
private Player player; // JLabel
public BubbleFrame() {
initObject();
initSetting();
setVisible(true); // 내부에 paintComponent() 호출 코드가 있다.
}
// new 하는 것
private void initObject() {
backgroundMap = new JLabel(new ImageIcon("image/backgroundMap.png"));
setContentPane(backgroundMap); // 백그라운드 화면 설정
player = new Player(); // 플레이어 추가
add(player); // Frame에 추가
}
// 각종 모든 세팅
private void initSetting() {
setSize(1000, 640);
getContentPane().setLayout(null); // null을 줘야 absolute 레이아웃이 됨
setLocationRelativeTo(null); // 가운데 배치
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // x버튼 클릭시 JVM 같이 종료하기
}
public static void main(String[] args) {
new BubbleFrame();
}
}
package site.metacoding.bubble.ex02;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
/**
*
* @author jjjjj 플레이어는 좌우이동
*
*/
public class Player extends JLabel {
private int x;
private int y;
private ImageIcon playerR; // 오른쪽을 보고있는 pR
public Player() {
initObject();
initSetting();
}
private void initObject() {
playerR = new ImageIcon("image/playerR.png");
}
private void initSetting() {
x = 70;
y = 535;
setIcon(playerR);
setSize(50, 50);
setLocation(x, y); // paintComponent 호출해줌, 부분 새로고침
}
}
[출처]
https://cafe.naver.com/metacoding
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9
반응형