Java:键盘事件实现音乐手动播放及停止(jdk13)

键盘Q,W,E,R 实现手动切歌,大键盘数字键0实现音乐停止播放,歌曲资源需手动添加到项目路径中

MusicThread.java

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedInputStream;

import java.io.FileNotFoundException;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

/***
 * 音乐播放器类
 * 
 * @author lenovo
 */
// 继承自线程类Thread
public class MusicThread extends Thread {
	private Player player=null;
	private static int flag=0;
	private String musicPath=null;
	private boolean loop=false;
	

	
	public MusicThread(String musicPath) {
		this.musicPath = musicPath;
	}

	public MusicThread(String musicpath,boolean loop) {
		this(musicpath);
		this.loop = loop;
	}
	
	public static void setFlag(int pFlag) {
		flag=pFlag;
	}
	
	public static int getFlag() {
		return flag;
	}

	@Override
	public void run() {
		super.run();
		try {
			if(loop) {
				while(true) {
					play();
				}
			}else {
				play();
			}
		} catch (FileNotFoundException | JavaLayerException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 播放方法
	 * @throws FileNotFoundException
	 * @throws JavaLayerException
	 */
	private void play() throws FileNotFoundException, JavaLayerException {
		BufferedInputStream buffer = new BufferedInputStream(MusicUtil.class.getClassLoader().getResourceAsStream(musicPath));
		player = new Player(buffer);
		player.play();
	}

}

MusicWin.java

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

class MusicWin extends JFrame {
    JTextArea jtextArea;
    MusicThread musicThread=null;
    public MusicWin() {
        JFrame frame = new JFrame("切换音乐");
        JPanel panel = new JPanel();
        jtextArea = new JTextArea();
        panel.add(jtextArea);
        panel.setBounds(200, 200, 200, 200);
        jtextArea.addKeyListener(new MusicListener());
      
        jtextArea.append("要切换音乐:\n");
        jtextArea.requestFocus();
        frame.add(jtextArea);
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
       
    }
	public static String[] musicPaths= {
			//音乐路径
			"com/neuedu/maplestory/sounds/bgm1.mp3",
			"com/neuedu/maplestory/sounds/bgm2.mp3",
			"com/neuedu/maplestory/sounds/bgm3.mp3",
			"com/neuedu/maplestory/sounds/bgm4.mp3"
	};
	
	public static enum MusicName{
		bgm1,
		bgm2,
		bgm3,
		bgm4
	};
	
	public void switchMusic(int chioce) {
		if (musicThread!=null) {
			musicThread.stop();;
		}
		musicThread=new MusicThread(musicPaths[chioce],true);
		musicThread.start();
	}
	public static void stopMusic() {
		musicThread.stop();
	}
    
    class MusicListener implements KeyListener {
        @Override 
        public void keyPressed(KeyEvent e) {
            jtextArea.append("按下:"+e.getKeyChar() + "\n");
            jtextArea.requestFocus();
            switch (e.getKeyCode()) {
    		case KeyEvent.VK_Q:
    			switchMusic(0);
    			break;
    		case KeyEvent.VK_W: 			
    			switchMusic(1);
    			break;
    		case KeyEvent.VK_E: 			
    			switchMusic(2);
    			break;
    		case KeyEvent.VK_R: 			
    			switchMusic(3);
    			break;
   			case KeyEvent.VK_0: 			
	   			stopMusic();
	   			break;
    		}
        }
        
        @Override
        public void keyReleased(KeyEvent e) {
        }
        
        @Override
        public void keyTyped(KeyEvent e) {
        }
    }
    
	public static void main(String[] args) {
		MusicWin win = new MusicWin();	
	}
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gabriel.Tian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值