스마트 인재개발원/Java

2021-04-29 뮤직플레이어 GUI 완성하기(스마트인재개발원)

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;
			}

		}

	}

}