이번 자바 스터디는 동빈나님의 자바 리듬게임 만들기 영상을 기반으로 진행하게 되었습니다
7강 ( 곡 기능 선택 구현 )
시작 버튼을 눌렀을 때 첫 번째 곡의 하이라이트 부분이 나오도록 편집
좌우 버튼을 클릭했을 때 곡이 바뀌도록 코드 추가 (Track 클래스 생성) / 해당 클래스는 하나의 곡의 정보를 담는 클래스
우클릭 - Source - Generate getter and setter ⇒ select all 클릭
생성자 생성 ⇒
Track이라는 클래스를 이용하여 새로운 변수를 만들어 줄때 참고한 값들을 그대로 초기화 해주는 기능을 수행하는 메서드
왼쪽 오른쪽 버튼을 눌렀을 때 버튼을 누른 trackList의 index 순서에 맞게
title Image, StartImage, Music 등을 출력하게 된다
DynamicBeat.java
package dynamic_beat_7_2;
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 java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import dynamic_beat_7.Main;
import dynamic_beat_7.Track;
public class DynamicBeat extends JFrame {
private Image screenImage;
private Graphics screenGraphic;
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 background = new ImageIcon(Main.class.getResource("../images/IntroBackground.jpg"))
.getImage();
private JLabel menuBar = new JLabel(new ImageIcon(Main.class.getResource("../images/menuBar.png")));
private JButton exitButton = new JButton(exitButtonBasicImage);
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;
ArrayList<Track> trackList = new ArrayList<Track>();
private Image titleImage;
private Image selectedImage;
private Music selectedMusic;
private int nowSelected = 0;
public DynamicBeat() {
setUndecorated(true);
setTitle("Dynamic Beat");
setSize(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBackground(new Color(0, 0, 0, 0));
setLayout(null);
trackList.add(new Track("funday Title Image.png", "funday Start Image.png", "funday Game Image.png", "funday.mp3"));
trackList.add(new Track("happpyrock Title Image.png", "happyrock Start Image.png", "happyrock Game Image.png", "happyrock.mp3"));
trackList.add(new Track("jazzyfrenchy Title Image.png", "jazzyfrenchy Start Image.png", "jazzyfrenchy Game Image.png", "jazzyfrenchy.mp3"));
//실제 파일들을 Track 클래스의 생성자에 있는 위치대로 설정 /해당 list를 관리할 수 있게 된다
exitButton.setBounds(1240, 0, 30, 30);
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 buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false);
// buttonEnteredMusic.start();
}
@Override
public void mouseExited(MouseEvent e) {
exitButton.setIcon(exitButtonBasicImage);
exitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
Music buttonEnteredMusic = new Music("buttonPressedMusic.mp3", false);
buttonEnteredMusic.start();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
System.exit(0);
}
});
add(exitButton);
startButton.setBounds(60, 430, 400, 100);
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 buttonEnteredMusic = new Music("buttonEnteredMusic.mp3", false);
// buttonEnteredMusic.start();
}
@Override
public void mouseExited(MouseEvent e) {
startButton.setIcon(startButtonBasicImage);
startButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
selectTrack(0);
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);
quitButton.setBounds(60, 560, 400, 100);
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));
}
@Override
public void mouseExited(MouseEvent e) {
quitButton.setIcon(quitButtonBasicImage);
quitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
System.exit(0);
}
});
add(quitButton);
leftButton.setVisible(false);
leftButton.setBounds(140, 310, 60, 60);
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));
}
@Override
public void mouseExited(MouseEvent e) {
leftButton.setIcon(leftButtonBasicImage);
leftButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
selectLeft();
}
});
add(leftButton);
rightButton.setVisible(false);
rightButton.setBounds(1080, 310, 60, 60);
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));
}
@Override
public void mouseExited(MouseEvent e) {
rightButton.setIcon(rightButtonBasicImage);
rightButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
selectRight();
}
});
add(rightButton);
menuBar.setBounds(0, 0, 1280, 30);
menuBar.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
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);
}
});
add(menuBar);
}
public void paint(Graphics g) {
screenImage = createImage(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT);
screenGraphic = screenImage.getGraphics();
screenDraw(screenGraphic);
g.drawImage(screenImage, 0, 0, null);
}
public void screenDraw(Graphics g) {
g.drawImage(background, 0, 0, null);
if(isMainScreen)
{
g.drawImage(selectedImage, 340, 100, null);
g.drawImage(titleImage, 340, 70, null);
}
paintComponents(g);
this.repaint();
}
public void selectTrack(int nowSelected) {
if(selectedMusic != null)
selectedMusic.close();
titleImage = new ImageIcon(Main.class.getResource("../images/" + trackList.get(nowSelected).getTitleImage())).getImage();
selectedImage = new ImageIcon(Main.class.getResource("../images/" + trackList.get(nowSelected).getStartImage())).getImage();
selectedMusic = new Music(trackList.get(nowSelected).getStartMusic(), true);
selectedMusic.start();
}
public void selectLeft() {
if(nowSelected == 0)
nowSelected = trackList.size() - 1;
else
nowSelected--;
selectTrack(nowSelected);
}
public void selectRight() {
if(nowSelected == trackList.size() - 1)
nowSelected = 0;
else
nowSelected++;
selectTrack(nowSelected);
}
}
Track.java
package dynamic_beat_7_2;
public class Track { //해당 곡의 이미지, 제목, 음원파일의 정보가 들어감
private String titleImage; //제목 부분 이미지
private String startImage; //게임 선택 창 표지 이미지
private String gameImage; //해당 곡을 실행했을 때 표지 이미지
private String startMusic; //게임 선택 창 출력
private String gameMusic; //해당 곡을 실행했을 때 출력
public String getTitleImage() {
return titleImage;
}
public void setTitleImage(String titleImage) {
this.titleImage = titleImage;
}
public String getStartImage() {
return startImage;
}
public void setStartImage(String startImage) {
this.startImage = startImage;
}
public String getGameImage() {
return gameImage;
}
public void setGameImage(String gameImage) {
this.gameImage = gameImage;
}
public String getStartMusic() {
return startMusic;
}
public void setStartMusic(String startMusic) {
this.startMusic = startMusic;
}
public String getGameMusic() {
return gameMusic;
}
public void setGameMusic(String gameMusic) {
this.gameMusic = gameMusic;
}
public Track(String titleImage, String startImage, String gameImage, String startMusic) { //생성자 생성
super();
this.titleImage = titleImage;
this.startImage = startImage;
this.gameImage = gameImage;
this.startMusic = startMusic;
this.gameMusic = gameMusic;
}
}
실행 화면 💻
'프로그래밍 언어 > java' 카테고리의 다른 글
자바 독학 [자바의 정석 | Ch5 ] : 스터디 기록 3 (0) | 2023.09.27 |
---|---|
자바 독학 [자바의 정석] : 스터디 기록 2 (0) | 2023.09.15 |
Chat GPT를 활용하여 Java 기초 공부하기 (0) | 2023.09.14 |
자바 리듬게임 만들기 ( 1 - 3강 ) (0) | 2023.07.29 |
자바 독학 [자바의 정석] : 스터디 기록 1 (0) | 2023.07.20 |