⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listpanel.java

📁 自己制作一个音频文件播放器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		songindex = Integer.parseInt(setplaylist.getProperty("songindex"));
		//初始化列表
		if(playindex > Integer.parseInt(setplaylist.getProperty("playlistnum")))
			playindex = Integer.parseInt(setplaylist.getProperty("playlistnum"));
		listnamevt = playlistdata.getListnamevt();
		leftlist.setListData(listnamevt);
		listnamevt = playlistdata.getSongindex(playindex).getsongnamevt();
		rightlist.setListData(listnamevt);
		leftlist.setSelectedIndex(playindex);
		rightlist.setSelectedIndex(songindex);
		if(aplayer != null)
		{
			aplayer.close();
			aplayer = null;
			
		}
		panel.setplaybt();
		startplay();
	}
	
    //	获得播放曲目名
	public String getPlayingSongname()
	{
		playindex = leftlist.getSelectedIndex();
		if(playindex != -1)
		{
			songindex = rightlist.getSelectedIndex();
			if(songindex!=-1)
	    	{
	     		songlistdata = playlistdata.getSongindex(playindex);
		    	playname = songlistdata.getsongname(songindex);
		    }
		}
		else playname = null;
		return playname;
	}
	
    //	创建一个播放器aplayer
	public void createplayer(String path)
	{
		try
		{
			playFile = new File(path);
			if(aplayer != null)
			{
				aplayer.stop();
				aplayer.close();
			}
			aplayer =  Manager.createPlayer(playFile.toURL());
			aplayer.addControllerListener(this);
			aplayer.start();
			panel.setsongname(getPlayingSongname());
			
         }catch(NoPlayerException e){
        	 e.printStackTrace();
         }
         catch(Exception e){
        	 e.printStackTrace();
         }
	}
	
    //	 player 事件监听器实现方法
	public synchronized void controllerUpdate(ControllerEvent e) {

    	if (e instanceof RealizeCompleteEvent) 
		{
    		if ((comp1 = aplayer.getVisualComponent()) != null)
                companel.add (comp1,BorderLayout.CENTER);
            if ((comp2 = aplayer.getControlPanelComponent()) != null)
                companel.add(comp2,BorderLayout.SOUTH);
            validate();
        }
    	if (e instanceof ControllerClosedEvent) 
    	{ 
    		if(comp1 !=null)
			{
				companel.remove(comp1);
			    comp1 = null;
			}
			if(comp2 != null)
			{
				companel.remove(comp2);
				comp2 = null;
			}
    	}
    	if (e instanceof EndOfMediaEvent)
    	{
    		nextplay();
    	}
    }
	//设置监听器
	private void setActionListener ()
	{
		ActionListener listener = new ItemAction();
		
	    addlistItem.addActionListener(listener);
	    dellistItem.addActionListener(listener);
	    addfileItem.addActionListener(listener);
	    addFileItem.addActionListener(listener);
	    delfileItem.addActionListener(listener);
	    oneloopItem.addActionListener(listener);
	    orderlyItem.addActionListener(listener);
	    loopItem.addActionListener(listener);
	    
	    leftlist.addMouseListener(new leftMouseHandler());
	    rightlist.addMouseListener(new rightMouseHandler());
	}
	
	//播放列表鼠标单击监听器
	private class leftMouseHandler extends MouseAdapter
	{
		public void mouseClicked(MouseEvent event)
		{
			if(event.getClickCount() == 1)
			{
				//显示相关的歌曲列表
				playindex = leftlist.getSelectedIndex();
	    		if(playindex!=-1)
	    		{
	    			songlistdata = playlistdata.getSongindex(playindex);
	    			listnamevt = songlistdata.getsongnamevt();
	    			rightlist.setListData(listnamevt);
	    		}
			}
		}
	}
	
	//歌曲列表鼠标双击监听器
	private class rightMouseHandler extends MouseAdapter
	{
		public void mouseClicked(MouseEvent event)
		{
			if(event.getClickCount() == 2)
			{
				//双击播放歌曲
				if(aplayer != null)
				{
					aplayer.close();
					aplayer = null;
					
				}
				panel.setplaybt();
				startplay();
			}
		}
	}
	//菜单按钮监听器
	private class ItemAction implements ActionListener{
		public void actionPerformed(ActionEvent e)
		{
			//新建列表
			if(e.getActionCommand().equals("新建列表"))
			{
				listna = JOptionPane.showInputDialog
				            (ListPanel.this,"请输入列表名","新建列表");
				playlistdata.setListname(listna);
				listnamevt = playlistdata.getListnamevt();
				leftlist.setListData(listnamevt);
				leftlist.setSelectedIndex(playlistdata.getLength()-1);
				listnamevt = playlistdata.getSongindex(playlistdata.getLength()-1).getsongnamevt();
				rightlist.setListData(listnamevt);
			}
			//删除列表
			else if(e.getActionCommand().equals("删除列表"))
			{
				playindex = leftlist.getSelectedIndex();
				if(playindex!=-1)
				{
					if(playindex!=0)
					{
						playlistdata.getSongindex(playindex).getsongnamevt().clear();
						playlistdata.delListname(playindex);
						playindex--;
				    	songlistdata = playlistdata.getSongindex(playindex);
				    	listnamevt = songlistdata.getsongnamevt();
					}
					else 
					{
						if(playlistdata.getLength() == 1)
					    {
							playlistdata.getSongindex(playindex).getsongnamevt().clear();
							playlistdata.delListname(playindex);
							listnamevt.clear();
					    }
						else
						{
							playlistdata.getSongindex(playindex).getsongnamevt().clear();
							playlistdata.delListname(playindex);
							songlistdata = playlistdata.getSongindex(playindex);
							listnamevt = songlistdata.getsongnamevt();
						}
					}
					rightlist.setListData(listnamevt);
					listnamevt = playlistdata.getListnamevt();
					leftlist.setListData(listnamevt);
					leftlist.setSelectedIndex(playindex);
				}
			}
			//添加单个文件
			else if(e.getActionCommand().equals("添加文件"))
			{
				chooser = new JFileChooser();
				chooser.setFileFilter(new AudioFilter());
				int flag = chooser.showOpenDialog(ListPanel.this);
				if(flag == JFileChooser.APPROVE_OPTION)
				{
					playindex = leftlist.getSelectedIndex();
		    		if(playindex!=-1)
		    		{
		    			filename = chooser.getSelectedFile().getName();
			    		filepath = chooser.getSelectedFile().getPath();
		    			songlistdata = playlistdata.getSongindex(playindex);
		    			songlistdata.setsongname(filename, filepath);
		    			listnamevt = songlistdata.getsongnamevt();
		    			rightlist.setListData(listnamevt);
		    		}
				}
				else if(flag == JFileChooser.CANCEL_OPTION)
				{}
			}
			//添加文件夹中的文件
			else if(e.getActionCommand().equals("添加文件夹"))
			{
				chooser = new JFileChooser();
				chooser.setMultiSelectionEnabled(true);
				chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
				chooser.setFileFilter(new AudioFilter());
				int flag = chooser.showOpenDialog(ListPanel.this);
				if(flag == JFileChooser.APPROVE_OPTION)
				{
					playindex = leftlist.getSelectedIndex();
	    	    	if(playindex!=-1)
	    	    	{
				    	file = chooser.getSelectedFile().listFiles();
					    int n = 0;
				       	while(n<file.length)
				     	{
					    	filename = file[n].getName();
		    	            filepath = file[n].getPath();
					    	if(file[n].getName().toLowerCase().endsWith(".mp3"))
					    	{
			    	            songlistdata = playlistdata.getSongindex(playindex);
			    		        songlistdata.setsongname(filename, filepath);
			    		        listnamevt = songlistdata.getsongnamevt();
			    		        rightlist.setListData(listnamevt);
					    	}
		    		        n++;
				    	}
	    	    	}
				}
				else if(flag == JFileChooser.CANCEL_OPTION)
				{}
			}
			//删除文件
			else if(e.getActionCommand().equals("删除文件"))
			{
				playindex = leftlist.getSelectedIndex();
				if(playindex!=-1)
				{
					songindex = rightlist.getSelectedIndex();
					if(songindex!=-1)
					{
						songlistdata = playlistdata.getSongindex(playindex);
						songlistdata.delsongname(songindex);
					    listnamevt = songlistdata.getsongnamevt();
			    		rightlist.setListData(listnamevt);
					}
				}
			}
			//单曲循环
			else if(e.getActionCommand().equals("单曲循环"))
			{
				playmode = 1;
				modelabel.setText("单曲循环");
			}
			//顺序播放
			else if(e.getActionCommand().equals("顺序播放"))
			{
				playmode = 2;
				modelabel.setText("顺序播放");
			}
			//循环播放
			else if(e.getActionCommand().equals("循环播放"))
			{
				playmode = 3;
				modelabel.setText("循环播放");
			}
		}
	}
	private JPanel northpanel;
	private JPanel menupanel;
	private JPanel leftpanel;
	private JPanel rightpanel;
	private JPanel companel;
	private JMenuBar menubar;
	private JMenu filemenu;
	private JMenu listmenu;
	private JMenu modemenu;
	private JMenuItem addlistItem;//添加列表
	private JMenuItem addfileItem;//添加文件到列表
	private JMenuItem addFileItem;//从文件夹添加文件到列表
	private JMenuItem delfileItem;//删除文件
	private JMenuItem dellistItem;//删除列表
	private JLabel modelabel;
	private JMenuItem oneloopItem; //单曲循环播放
	private JMenuItem orderlyItem; //顺序播放
	private JMenuItem loopItem; //循环播放
	
	private JList leftlist; //左边的列表
	private JList rightlist; //右边的列表
	private Vector listnamevt; //列表数据向量
	private String listna; 
	private String playpath; //播放路径
	private String playname; //播放歌曲名
	
	private PlayListData playlistdata;
	private SongListData songlistdata;
	private int playindex; //播放列表计数
	private int songindex; //歌曲列表计数
	
	private JFileChooser chooser;
	private String filename;
	private String filepath;
	private File [] file;
	
	private Player aplayer; //Player播放器
    private Component comp1;//Player 可视组件
    private Component comp2;//Player控制组件
    private File playFile;
    
    private int playmode = 2; //标记播放模式 1. 单曲播放 2.顺序播放 3.循环播放
    private String nextORfront = null; //
    private MainPanel panel;
    private int songfiles;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -