import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.CardLayout;
import javax.swing.JLabel;
import javax.swing.UIManager;
import java.awt.Font;
import java.awt.Color;
import javax.swing.SwingConstants;
import javax.swing.JButton;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MusicPlayerGUI {
private JFrame frame;
MusicPlayer mp = new MusicPlayer();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MusicPlayerGUI window = new MusicPlayerGUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public MusicPlayerGUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.getContentPane().setBackground(Color.LIGHT_GRAY);
frame.setBounds(100, 100, 642, 252);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JPanel panel = new JPanel();
panel.setBackground(Color.BLACK);
panel.setBounds(12, 10, 602, 99);
frame.getContentPane().add(panel);
panel.setLayout(new CardLayout(0, 0));
JLabel lbl_info = new JLabel("Music info");
lbl_info.setForeground(Color.WHITE);
lbl_info.setHorizontalAlignment(SwingConstants.CENTER);
lbl_info.setBackground(Color.BLACK);
lbl_info.setFont(new Font("맑은 고딕", Font.PLAIN, 20));
panel.add(lbl_info, "name_160341214313800");
JPanel panel_1 = new JPanel();
panel_1.setBounds(12, 116, 602, 87);
frame.getContentPane().add(panel_1);
panel_1.setLayout(new GridLayout(1, 0, 0, 0));
JButton btnNewButton_3 = new JButton("\u25C0\u25C0");
btnNewButton_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mp.prePlay();
Music song = mp.play();
lbl_info.setText(mp.musicInfo(song));
}
});
btnNewButton_3.setFont(new Font("굴림", Font.PLAIN, 25));
panel_1.add(btnNewButton_3);
JButton btnNewButton_2 = new JButton("\u25B6");
//버튼에 액션을 감지할 수 있는 액션부여
btnNewButton_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Music song = mp.play();
//버튼이 눌리면 현재 재생곡 정보 띄워주기 -> musicinfo()
//라벨에 가져온 음악 정보 띄우기!!!!!!!!!!!!!!
//라벨에 내용을 지정하기 위한 메소드
//get텍스라는 녀석은
lbl_info.setText(mp.musicInfo(song));
}
});
btnNewButton_2.setFont(new Font("굴림", Font.PLAIN, 25));
panel_1.add(btnNewButton_2);
JButton btnNewButton_1 = new JButton("\u25A0");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mp.stop();
lbl_info.setText("STOP");
}
});
btnNewButton_1.setFont(new Font("굴림", Font.PLAIN, 25));
panel_1.add(btnNewButton_1);
JButton btnNewButton = new JButton("\u25B6\u25B6");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mp.nextPlay();
Music song = mp.play();
lbl_info.setText(mp.musicInfo(song));
}
});
btnNewButton.setFont(new Font("굴림", Font.PLAIN, 25));
panel_1.add(btnNewButton);
}
}
import java.util.ArrayList;
import javazoom.jl.player.MP3Player;
public class MusicPlayer {
// 어러개의 음악을 담을 수 있는 어레이 리스트 생성하자
ArrayList<Music> list = new ArrayList<>();
MP3Player mp3 = new MP3Player();
// 플레이 되고있는 곡의 인덱스 번호를 기억하기 위한 변수생성
int num = 0;
Music song;
// 여러개의 음악을 list에 추가해줄 생성자 메소드
public MusicPlayer() {
list.add(new Music("라일락", "아이유", 40, "Music/lilac.mp3"));
list.add(new Music("on the greoun", "로제", 90, "Music/on the ground.mp3"));
list.add(new Music("parachute", "John K", 100, "Music/parachute.mp3"));
list.add(new Music("peaches", "Justin Bieber", 10, "Music/peaches.mp3"));
list.add(new Music("Rollin", "브레이브 걸스", 110, "Music/rollin.mp3"));
}
// 노래를 재생하기 위한 메소드 생성
public Music play() {
// 재생의 조건을 주자 만약 현재 재생되고 있는 노래가 있다면
// 없을때에만 노래를 재상한다.
// isPlaying() : 재생되고 있는 음악이 있다라고 하면 True 재생되는 노래가 없다 False
song = list.get(num);
if (!mp3.isPlaying()) {
mp3.play(song.getmusicPatch());
}
return song;
}
// 음악 재생시 정보를 보여주는 메소드 생성
public String musicInfo(Music song) {
return song.getTilte() + ", " + song.getSinger() + ", " + changeTime(song);
}
// 재생시간을 분/초로 나눠주는 메소드
public String changeTime(Music song) {
return (song.getplayTime() / 60) + "분" + (song.getplayTime() % 60) + "초";
}
// 음악 재생을 멈춰줄 수 있는 메소드
public void stop() {
if (mp3.isPlaying()) {
mp3.stop();
}
}
// 다음 곡을 재생하기 위한 메소드
public Music nextPlay() {
if (num < list.size() - 1) {
num++;
} else {
num = 0;
}
// 현재 재생되고있는 노래가 있다면 곡을 정지하고
if (mp3.isPlaying()) {
stop();
}
song = list.get(num);
mp3.play(song.getmusicPatch());
return song;
}
public Music prePlay() {
if (num <= 0) {
num = list.size() - 1;
} else {
num--;
}
if (mp3.isPlaying()) {
stop();
}
// 현재 기억하고 있는 num에서 이전으로 돌아가기 위한 처리가 필요
song = list.get(num);
mp3.play(song.getmusicPatch());
return song;
}
}
public class Music {
// 음악에 대한 정보만 저장할 수있는 Model -> Value Object (VO Class)
// 노래제목, 가수이름, 노래의 플레이 타임, 노래의 경로
private String title;
private String Singer;
private int playTime;
private String musicPatch;
// 정보들을 추가해 줄 수 있는 생성자메소드 만들기
public Music(String title, String Singer, int playTime, String musicPatch) {
this.title = title;
this.Singer = Singer;
this.playTime = playTime;
this.musicPatch = musicPatch;
}
// 정보를 가지고 올 수 있는 getter()생성
public String getTilte() {
return title;
}
public String getSinger() {
return Singer;
}
public int getplayTime() {
return playTime;
}
public String getmusicPatch() {
return musicPatch;
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// View가 되는 부분
Scanner sc = new Scanner(System.in);
// 반복문의 진행 여부를 확인할 수 있는 변수
boolean isOk = true;
MusicPlayer mp = new MusicPlayer();
Music song;
// mp3를 계속해서 사용할 수 있도록 반복문으로 작성!
while (isOk)// 사용자가 볼 수 있는 메뉴선택 기능 생성
{
System.out.print("[1]재생 [2]정지 [3]다음곡 [4]이전곡 [5]종료 >>");
int menu = sc.nextInt();
if (menu == 1) {
song = mp.play();
System.out.println(mp.musicInfo(song));
} else if (menu == 2) {
mp.stop();
} else if (menu == 3) {
song = mp.nextPlay();
System.out.println(mp.musicInfo(song));
} else if (menu == 4) {
song = mp.prePlay();
System.out.println(mp.musicInfo(song));
} else if (menu == 5) {
System.out.println("종료되었습니다.");
isOk = false;
}
}
}
}