이번 자바 스터디는 동빈나님의 자바 리듬게임 만들기 영상을 기반으로 진행하게 되었습니다
4강 (메뉴 바 구현하기)
이클립스에서 자동으로 코드의 띄어쓰기 및 문단 정리를 하고 싶다면
ctrl + shift + F
포토샵을 통한 메뉴바(1280 * 30 , 투명도 70%), 닫기 버튼과 버튼 활성화 (30 * 30) 총 3장의 이미지가 필요
마우스의 위치값을 구하여 메뉴바를 잡고 화면 이동 가능하도록 기능 추가
마우스가 올라왔을 경우 이미지 파일 교체
닫기 버튼 이미지 클릭 시 프로그램 종료
버튼 클릭 시 클릭 bgm 추가
DynamicBeat.java
package dynamic_beat_4;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame; //라이브러단축키 ctrl + shift + O
import javax.swing.JLabel;
public class DynamicBeat extends JFrame { // 그래픽 기반
private Image screenImage;
private Graphics screenGraphic; // 더블 버퍼링을 위해 전체 화면의 이미지를 담는 두 인스턴스
private Image IntroBackground = new ImageIcon(Main.class.getResource("../images/IntroBackground.jpg")).getImage();
// 메인페이지의 위치를 기반으로 해서 IntroBackground라는 이름의 이미지 변수에 초기화
private JLabel menuBar = new JLabel(new ImageIcon(Main.class.getResource("../images/menuBar.png")));
private ImageIcon exitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/exitButtonBasic.jpg"));
private ImageIcon exitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/exitButtonEnter.jpg"));
private JButton exitButton = new JButton(exitButtonBasicImage); //버튼의 기본값으로 Basic버튼을 가져옴
private int mouseX, mouseY; //프로그램 안에서의 마우스 위치값
public DynamicBeat() {
setUndecorated(true);
setTitle("Dynamic Beat");
setSize(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT); // 1280 * 720
setResizable(false); // 사용자가 인위적으로 화면을 줄일 수 없도록
setLocationRelativeTo(null); // 실행 시 만든 화면창이 컴퓨터 정중앙에 위치하도록
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 게임창 종료 시 전체 프로그램 종료를 알림
setVisible(true); // 만든 게임창이 출력되도록
setBackground(new Color(0, 0, 0, 0)); // paintColor 시 회색이 아닌 하얀색 출력
setLayout(null); // 버튼 혹은 JLabel을 했을 시에 그 위치 그대로 적용
menuBar.setBounds(0, 0, 1280, 30); // 위치와 크기를 정해줌
menuBar.addMouseListener(new MouseAdapter() {
@Override //해당 어노테이션을 사용하면, 컴파일러가 해당 메서드가 상위 클래스에서 오버라이드된 메서드인지 확인할 수 있다 / 실수 방지, 코드의 가독성을 높임
public void mousePressed(MouseEvent e) { //마우스 클릭 이벤트가 발생했을 떄 마우스 x, y 좌표를 가져옴
mouseX = e.getX();
mouseY = e.getY();
}
});
menuBar.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) { //마우스 드래그 이벤트 발생 시
int x = e.getXOnScreen();
int y = e.getYOnScreen(); //해당 값들의 좌표를 가져옴
setLocation(x - mouseX, y - mouseY); //가져온 좌표를 통해 메뉴바를 잡고 이동이 가능
}
});
exitButton.setBounds(1240, 0, 30, 30); //x, y좌표
exitButton.setBorderPainted(false);
exitButton.setContentAreaFilled(false);
exitButton.setFocusPainted(false);
exitButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) { //마우스가 닫기 버튼에 올라왔을 경우 이벤트 발생
exitButton.setIcon(exitButtonEnteredImage); //버튼을 활성화된 이미지로 교체
exitButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); //마우스가 손가락 모양으로 바뀜
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
}
@Override
public void mouseExited(MouseEvent e) { //마우스가 닫기 버튼에 있지 않은 경우
exitButton.setIcon(exitButtonBasicImage); //비활성화 버튼 이미지로 교체
exitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //마우스가 원랴 상태로 돌아오도록
}
@Override
public void mousePressed (MouseEvent e) { //마우스가 닫기 버튼을 클릭했을 경우
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
try { //정상적으로 bgm이 작동하도록 예외처리
Thread.sleep(1000);
} catch (InterruptedException ex){
ex.printStackTrace();
}
System.exit(0); //프로그램 종료
}
});
add(exitButton);
Music IntroMusic = new Music("IntroMusic.mp3", true); // 프로그램 시작 시 음악이 무한정 반복
IntroMusic.start();
add(menuBar);
}
public void paint(Graphics g) {
screenImage = createImage(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT); // 프로그램 화면 만큼 이미지를 생성
screenGraphic = screenImage.getGraphics(); // screenGraphic객체를 통해 이미지를 얻어온다
screenDraw(screenGraphic);
g.drawImage(screenImage, 0, 0, null);
}
public void screenDraw(Graphics g) { // 프로그램이 종료되기 전까지 해당 작업을 계속 반복
g.drawImage(IntroBackground, 0, 0, null); // 0, 0 위치에 그려줌
paintComponents(g); // JLabel과 같은 요소를 JFrame안에 추가해주면 그려주는 것 / 메뉴 바의 경우 항상 존재하는 이미지이기 때문에 paint를
// 이용하였다
this.repaint(); // paint 함수를 불러옴
}
}
//왜인지는 모르겠으나 버튼의 bgm이 들리지 않는다 아무래도 이전 메인 IntroMusic이 안들리는 것과 동일한 문제인 듯 하다
5강 (화면 전환)
시작하기 및 종료 버튼 구현
시작하기, 시작하기 활성화, 종로, 종료 활성화 총 4개의 버튼 이미지 필요 ( 400 * 100 )
시작하기 버튼 클릭 시 메인화면이 바뀜
DynamicBeat.java
package dynamic_beat_5;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame; //라이브러단축키 ctrl + shift + O
import javax.swing.JLabel;
public class DynamicBeat extends JFrame { // 그래픽 기반
private Image screenImage;
private Graphics screenGraphic; // 더블 버퍼링을 위해 전체 화면의 이미지를 담는 두 인스턴스
private Image background = new ImageIcon(Main.class.getResource("../images/IntroBackground.jpg")).getImage();
// 메인페이지의 위치를 기반으로 해서 background라는 이름의 이미지 변수에 초기화
private JLabel menuBar = new JLabel(new ImageIcon(Main.class.getResource("../images/menuBar.png")));
private ImageIcon exitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/exitButtonBasic.jpg"));
private ImageIcon exitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/exitButtonEnter.jpg"));
private ImageIcon startButtonBasicImage = new ImageIcon(Main.class.getResource("../images/startButtonBasic.png"));
private ImageIcon startButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/startButtonEntered.png"));
private ImageIcon quitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/quitButtonBasic.png"));
private ImageIcon quitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/quitButtonEntered.png"));
private JButton exitButton = new JButton(exitButtonBasicImage); //버튼의 기본값으로 Basic버튼을 가져옴
private JButton startButton = new JButton(startButtonBasicImage);
private JButton quitButton = new JButton(quitButtonBasicImage);
private int mouseX, mouseY; //프로그램 안에서의 마우스 위치값
public DynamicBeat() {
setUndecorated(true);
setTitle("Dynamic Beat");
setSize(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT); // 1280 * 720
setResizable(false); // 사용자가 인위적으로 화면을 줄일 수 없도록
setLocationRelativeTo(null); // 실행 시 만든 화면창이 컴퓨터 정중앙에 위치하도록
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 게임창 종료 시 전체 프로그램 종료를 알림
setVisible(true); // 만든 게임창이 출력되도록
setBackground(new Color(0, 0, 0, 0)); // paintColor 시 회색이 아닌 하얀색 출력
setLayout(null); // 버튼 혹은 JLabel을 했을 시에 그 위치 그대로 적용
menuBar.setBounds(0, 0, 1280, 30); // 위치와 크기를 정해줌
menuBar.addMouseListener(new MouseAdapter() {
@Override //해당 어노테이션을 사용하면, 컴파일러가 해당 메서드가 상위 클래스에서 오버라이드된 메서드인지 확인할 수 있다 / 실수 방지, 코드의 가독성을 높임
public void mousePressed(MouseEvent e) { //마우스 클릭 이벤트가 발생했을 떄 마우스 x, y 좌표를 가져옴
mouseX = e.getX();
mouseY = e.getY();
}
});
menuBar.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) { //마우스 드래그 이벤트 발생 시
int x = e.getXOnScreen();
int y = e.getYOnScreen(); //해당 값들의 좌표를 가져옴
setLocation(x - mouseX, y - mouseY); //가져온 좌표를 통해 메뉴바를 잡고 이동이 가능
}
});
exitButton.setBounds(1240, 0, 30, 30); //x, y좌표
exitButton.setBorderPainted(false);
exitButton.setContentAreaFilled(false);
exitButton.setFocusPainted(false);
exitButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) { //마우스가 닫기 버튼에 올라왔을 경우 이벤트 발생
exitButton.setIcon(exitButtonEnteredImage); //버튼을 활성화된 이미지로 교체
exitButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); //마우스가 손가락 모양으로 바뀜
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
}
@Override
public void mouseExited(MouseEvent e) { //마우스가 닫기 버튼에 있지 않은 경우
exitButton.setIcon(exitButtonBasicImage); //비활성화 버튼 이미지로 교체
exitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //마우스가 원랴 상태로 돌아오도록
}
@Override
public void mousePressed (MouseEvent e) { //마우스가 닫기 버튼을 클릭했을 경우
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
try { //정상적으로 bgm이 작동하도록 예외처리
Thread.sleep(1000);
} catch (InterruptedException ex){
ex.printStackTrace();
}
System.exit(0); //프로그램 종료
}
});
add(exitButton); //exitButton
Music IntroMusic = new Music("IntroMusic.mp3", true); // 프로그램 시작 시 음악이 무한정 반복
IntroMusic.start();
add(menuBar);
startButton.setBounds(60, 430, 400, 100); //x, y좌표
startButton.setBorderPainted(false);
startButton.setContentAreaFilled(false);
startButton.setFocusPainted(false);
startButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) { //마우스가 시작하기에 올라왔을 경우 이벤트 발생
startButton.setIcon(startButtonEnteredImage); //버튼을 활성화된 이미지로 교체
startButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); //마우스가 손가락 모양으로 바뀜
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
}
@Override
public void mouseExited(MouseEvent e) { //마우스가 닫기 버튼에 있지 않은 경우
startButton.setIcon(startButtonBasicImage); //비활성화 버튼 이미지로 교체
startButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //마우스가 원랴 상태로 돌아오도록
}
@Override
public void mousePressed (MouseEvent e) { //마우스가 닫기 버튼을 클릭했을 경우
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
//시작하기 버튼 클릭 시
startButton.setVisible(false); //시작하기 버튼이 보이지 않도록
quitButton.setVisible(false); //종료하기 버튼이 보이지 않도록
background = new ImageIcon(Main.class.getResource("../images/mainBackground.jpg")).getImage();
}
});
add(startButton); //startButton
quitButton.setBounds(60, 560, 400, 100); //x, y좌표
quitButton.setBorderPainted(false);
quitButton.setContentAreaFilled(false);
quitButton.setFocusPainted(false);
quitButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) { //마우스가 시작하기에 올라왔을 경우 이벤트 발생
quitButton.setIcon(quitButtonEnteredImage); //버튼을 활성화된 이미지로 교체
quitButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); //마우스가 손가락 모양으로 바뀜
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
}
@Override
public void mouseExited(MouseEvent e) { //마우스가 닫기 버튼에 있지 않은 경우
quitButton.setIcon(quitButtonBasicImage); //비활성화 버튼 이미지로 교체
quitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //마우스가 원랴 상태로 돌아오도록
}
@Override
public void mousePressed (MouseEvent e) { //마우스가 닫기 버튼을 클릭했을 경우
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
try { //정상적으로 bgm이 작동하도록 예외처리
Thread.sleep(1000);
} catch (InterruptedException ex){
ex.printStackTrace();
}
System.exit(0); //프로그램 종료
}
});
add(quitButton); //quitButton
}
public void paint(Graphics g) {
screenImage = createImage(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT); // 프로그램 화면 만큼 이미지를 생성
screenGraphic = screenImage.getGraphics(); // screenGraphic객체를 통해 이미지를 얻어온다
screenDraw(screenGraphic);
g.drawImage(screenImage, 0, 0, null);
}
public void screenDraw(Graphics g) { // 프로그램이 종료되기 전까지 해당 작업을 계속 반복
g.drawImage(background, 0, 0, null); // 0, 0 위치에 그려줌
paintComponents(g); // JLabel과 같은 요소를 JFrame안에 추가해주면 그려주는 것 / 메뉴 바의 경우 항상 존재하는 이미지이기 때문에 paint를
// 이용하였다
this.repaint(); // paint 함수를 불러옴
}
}
6강 (곡 선택 화면 디자인)
리듬게임에 사용될 곡 3개 필요
각각의 곡마다 사용될 2개의 이미지 필요 (총 6개 필요)
게임이 시작하는 이미지 600 * 450 (메인 화면에서 보이는 시작 이미지)
게임 시작 시 나오는 전체 배경 화면 이미지 1280 * 720
2개의 버튼 필요 (좌, 우 버튼) 명도가 다른 이미지 2개가 필요하므로 총 4개의 이미지가 필요 60 * 60
600 * 120 으로 노래 제목 바 만들기
DynamicBeat.java
package dynamic_beat_6;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame; //라이브러단축키 ctrl + shift + O
import javax.swing.JLabel;
public class DynamicBeat extends JFrame { // 그래픽 기반
private Image screenImage;
private Graphics screenGraphic; // 더블 버퍼링을 위해 전체 화면의 이미지를 담는 두 인스턴스
private Image selectedImage = new ImageIcon(Main.class.getResource("../images/funday Start Image.png")).getImage();
private Image background = new ImageIcon(Main.class.getResource("../images/IntroBackground.jpg")).getImage();
// 메인페이지의 위치를 기반으로 해서 background라는 이름의 이미지 변수에 초기화
private JLabel menuBar = new JLabel(new ImageIcon(Main.class.getResource("../images/menuBar.png")));
private ImageIcon exitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/exitButtonBasic.jpg"));
private ImageIcon exitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/exitButtonEnter.jpg"));
private ImageIcon startButtonBasicImage = new ImageIcon(Main.class.getResource("../images/startButtonBasic.png"));
private ImageIcon startButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/startButtonEntered.png"));
private ImageIcon quitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/quitButtonBasic.png"));
private ImageIcon quitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/quitButtonEntered.png"));
private ImageIcon leftButtonBasicImage = new ImageIcon(Main.class.getResource("../images/leftButtonBasic.png"));
private ImageIcon leftButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/leftButtonEntered.png"));
private ImageIcon rightButtonBasicImage = new ImageIcon(Main.class.getResource("../images/rightButtonBasic.png"));
private ImageIcon rightButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/rightButtonEntered.png"));
private Image titleImage = new ImageIcon(Main.class.getResource("../images/funday Title Image.png")).getImage();
private JButton exitButton = new JButton(exitButtonBasicImage); //버튼의 기본값으로 Basic버튼을 가져옴
private JButton startButton = new JButton(startButtonBasicImage);
private JButton quitButton = new JButton(quitButtonBasicImage);
private JButton leftButton = new JButton(leftButtonBasicImage);
private JButton rightButton = new JButton(rightButtonBasicImage);
private int mouseX, mouseY; //프로그램 안에서의 마우스 위치값
private boolean isMainScreen = false; //Main값으로 바뀌게 되면 해당 값이 True로 바뀌게 된다
public DynamicBeat() {
setUndecorated(true);
setTitle("Dynamic Beat");
setSize(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT); // 1280 * 720
setResizable(false); // 사용자가 인위적으로 화면을 줄일 수 없도록
setLocationRelativeTo(null); // 실행 시 만든 화면창이 컴퓨터 정중앙에 위치하도록
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 게임창 종료 시 전체 프로그램 종료를 알림
setVisible(true); // 만든 게임창이 출력되도록
setBackground(new Color(0, 0, 0, 0)); // paintColor 시 회색이 아닌 하얀색 출력
setLayout(null); // 버튼 혹은 JLabel을 했을 시에 그 위치 그대로 적용
leftButton.setVisible(false); //왼쪽 버튼 비활성화
rightButton.setVisible(false); //오른쪽 버튼 비활성화
menuBar.setBounds(0, 0, 1280, 30); // 위치와 크기를 정해줌
menuBar.addMouseListener(new MouseAdapter() {
@Override //해당 어노테이션을 사용하면, 컴파일러가 해당 메서드가 상위 클래스에서 오버라이드된 메서드인지 확인할 수 있다 / 실수 방지, 코드의 가독성을 높임
public void mousePressed(MouseEvent e) { //마우스 클릭 이벤트가 발생했을 떄 마우스 x, y 좌표를 가져옴
mouseX = e.getX();
mouseY = e.getY();
}
});
menuBar.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) { //마우스 드래그 이벤트 발생 시
int x = e.getXOnScreen();
int y = e.getYOnScreen(); //해당 값들의 좌표를 가져옴
setLocation(x - mouseX, y - mouseY); //가져온 좌표를 통해 메뉴바를 잡고 이동이 가능
}
});
exitButton.setBounds(1240, 0, 30, 30); //x, y좌표
exitButton.setBorderPainted(false);
exitButton.setContentAreaFilled(false);
exitButton.setFocusPainted(false);
exitButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) { //마우스가 닫기 버튼에 올라왔을 경우 이벤트 발생
exitButton.setIcon(exitButtonEnteredImage); //버튼을 활성화된 이미지로 교체
exitButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); //마우스가 손가락 모양으로 바뀜
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
}
@Override
public void mouseExited(MouseEvent e) { //마우스가 닫기 버튼에 있지 않은 경우
exitButton.setIcon(exitButtonBasicImage); //비활성화 버튼 이미지로 교체
exitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //마우스가 원랴 상태로 돌아오도록
}
@Override
public void mousePressed (MouseEvent e) { //마우스가 닫기 버튼을 클릭했을 경우
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
try { //정상적으로 bgm이 작동하도록 예외처리
Thread.sleep(1000);
} catch (InterruptedException ex){
ex.printStackTrace();
}
System.exit(0); //프로그램 종료
}
});
add(exitButton); //exitButton
Music IntroMusic = new Music("IntroMusic.mp3", true); // 프로그램 시작 시 음악이 무한정 반복
IntroMusic.start();
add(menuBar);
startButton.setBounds(60, 430, 400, 100); //x, y좌표
startButton.setBorderPainted(false);
startButton.setContentAreaFilled(false);
startButton.setFocusPainted(false);
startButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) { //마우스가 시작하기에 올라왔을 경우 이벤트 발생
startButton.setIcon(startButtonEnteredImage); //버튼을 활성화된 이미지로 교체
startButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); //마우스가 손가락 모양으로 바뀜
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
}
@Override
public void mouseExited(MouseEvent e) { //마우스가 시작 버튼에 있지 않은 경우
startButton.setIcon(startButtonBasicImage); //비활성화 버튼 이미지로 교체
startButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //마우스가 원랴 상태로 돌아오도록
}
@Override
public void mousePressed (MouseEvent e) { //마우스가 시작 버튼을 클릭했을 경우
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
//시작하기 버튼 클릭 시
startButton.setVisible(false); //시작하기 버튼이 보이지 않도록
quitButton.setVisible(false); //종료하기 버튼이 보이지 않도록
leftButton.setVisible(true); // 시작버튼 클릭 시 왼쪽 버튼 활성화
rightButton.setVisible(true); //시작버튼 클릭 시 오른쪽 버튼 활성화
background = new ImageIcon(Main.class.getResource("../images/mainBackground.jpg")).getImage();
isMainScreen = true;
}
});
add(startButton); //startButton
quitButton.setBounds(60, 560, 400, 100); //x, y좌표
quitButton.setBorderPainted(false);
quitButton.setContentAreaFilled(false);
quitButton.setFocusPainted(false);
quitButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) { //마우스가 시작하기에 올라왔을 경우 이벤트 발생
quitButton.setIcon(quitButtonEnteredImage); //버튼을 활성화된 이미지로 교체
quitButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); //마우스가 손가락 모양으로 바뀜
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
}
@Override
public void mouseExited(MouseEvent e) { //마우스가 닫기 버튼에 있지 않은 경우
quitButton.setIcon(quitButtonBasicImage); //비활성화 버튼 이미지로 교체
quitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //마우스가 원랴 상태로 돌아오도록
}
@Override
public void mousePressed (MouseEvent e) { //마우스가 닫기 버튼을 클릭했을 경우
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
try { //정상적으로 bgm이 작동하도록 예외처리
Thread.sleep(1000);
} catch (InterruptedException ex){
ex.printStackTrace();
}
System.exit(0); //프로그램 종료
}
});
add(quitButton); //quitButton
leftButton.setBounds(140, 310, 60, 60); //x, y좌표
leftButton.setBorderPainted(false);
leftButton.setContentAreaFilled(false);
leftButton.setFocusPainted(false);
leftButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) { //마우스가 시작하기에 올라왔을 경우 이벤트 발생
leftButton.setIcon(leftButtonEnteredImage); //버튼을 활성화된 이미지로 교체
leftButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); //마우스가 손가락 모양으로 바뀜
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
}
@Override
public void mouseExited(MouseEvent e) { //마우스가 닫기 버튼에 있지 않은 경우
leftButton.setIcon(leftButtonBasicImage); //비활성화 버튼 이미지로 교체
leftButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //마우스가 원랴 상태로 돌아오도록
}
@Override
public void mousePressed (MouseEvent e) { //마우스가 닫기 버튼을 클릭했을 경우
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
//왼쪽 버튼 이벤트
}
});
add(leftButton); //leftButton 추가
rightButton.setBounds(1060, 310, 60, 60); //x, y좌표
rightButton.setBorderPainted(false);
rightButton.setContentAreaFilled(false);
rightButton.setFocusPainted(false);
rightButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) { //마우스가 시작하기에 올라왔을 경우 이벤트 발생
rightButton.setIcon(rightButtonEnteredImage); //버튼을 활성화된 이미지로 교체
rightButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); //마우스가 손가락 모양으로 바뀜
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
}
@Override
public void mouseExited(MouseEvent e) { //마우스가 닫기 버튼에 있지 않은 경우
rightButton.setIcon(rightButtonBasicImage); //비활성화 버튼 이미지로 교체
rightButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //마우스가 원랴 상태로 돌아오도록
}
@Override
public void mousePressed (MouseEvent e) { //마우스가 닫기 버튼을 클릭했을 경우
Music buttonPressedMusic = new Music("buttonPressedMusic.mp3", false); //버튼 클릭 bgm 재생
buttonPressedMusic.start();
//오른쪽 버튼 이벤트
}
});
add(rightButton); //rightButton 추가
}
public void paint(Graphics g) {
screenImage = createImage(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT); // 프로그램 화면 만큼 이미지를 생성
screenGraphic = screenImage.getGraphics(); // screenGraphic객체를 통해 이미지를 얻어온다
screenDraw(screenGraphic);
g.drawImage(screenImage, 0, 0, null);
}
public void screenDraw(Graphics g) { // 프로그램이 종료되기 전까지 해당 작업을 계속 반복 / 현재 화면이 mainScreen인 경우
g.drawImage(background, 0, 0, null); // 0, 0 위치에 그려줌
if(isMainScreen) { //true일 경우
g.drawImage(selectedImage, 340, 100, null); //단순한 이미지를 보여줄 때 사용
g.drawImage(titleImage, 340, 70, null); //타이틀 이미지
}
paintComponents(g); // JLabel과 같은 요소를 JFrame안에 추가해주면 그려주는 것 / 메뉴 바의 경우 항상 존재하는 이미지이기 때문에 paint 사용 / 메인페이지에 추가된 요소들을 보여줌
this.repaint(); // paint 함수를 불러옴
}
}
실행 화면 💻
'스터디 > java' 카테고리의 다른 글
자바 독학 [자바의 정석] : 스터디 기록 2 (0) | 2023.09.15 |
---|---|
Chat GPT를 활용하여 Java 기초 공부하기 (0) | 2023.09.14 |
자바 리듬게임 만들기 ( 7강 ) (0) | 2023.08.13 |
자바 리듬게임 만들기 ( 1 - 3강 ) (0) | 2023.07.29 |
자바 독학 [자바의 정석] : 스터디 기록 1 (0) | 2023.07.20 |