Audio.java
上传用户:cjy_led
上传日期:2021-02-20
资源大小:2k
文件大小:8k
源码类别:

Audio

开发平台:

Java

  1. package View;
  2. import java.awt.FlowLayout;
  3. import java.awt.GridLayout;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.io.File;
  7. import java.io.IOException;
  8. import java.net.MalformedURLException;
  9. import javax.media.Manager;
  10. import javax.media.NoPlayerException;
  11. import javax.media.Player;
  12. import javax.swing.JButton;
  13. import javax.swing.JFrame;
  14. import javax.swing.JLabel;
  15. import javax.swing.JOptionPane;
  16. import javax.swing.JPanel;
  17. import javax.swing.JTextArea;
  18. import javax.swing.JTextField;
  19. import java.awt.BorderLayout;
  20. import java.awt.Component;
  21. import java.awt.FileDialog;
  22. import java.awt.TextArea;
  23. import javax.media.ControllerEvent;
  24. import javax.media.ControllerListener;
  25. import javax.media.EndOfMediaEvent;
  26. import javax.media.RealizeCompleteEvent;
  27. public class Audio implements ActionListener{
  28. JFrame jframeAudio= new JFrame("归档查看系统");//整体面板
  29. JTextArea message= new JTextArea(2,35);  //显示播放信息
  30. JTextField filePath = new JTextField(15); //文件路径框
  31. JTextField jtNumAudio = new JTextField(10); //音频号
  32. JTextField jtName= new JTextField(10);   //题名
  33. JTextField jtNumFiles= new JTextField(10); //档案号  
  34. JTextField jtAuthor= new JTextField(10); //摄影者
  35. JTextField jtDate = new JTextField(10); //音频的日期
  36. JTextField jtPlace = new JTextField(10);  //拍摄地点
  37. // JTextArea jtDescription= new JTextArea(2,43); //音频的描述
  38. TextArea  jtDescription = new TextArea(null,2,65,TextArea.SCROLLBARS_VERTICAL_ONLY);
  39. JPanel jpanelControl= new JPanel(new GridLayout(2,1));
  40. File selectedFile;
  41. private FileDialog fileDialog;
  42. private String filePosition;
  43. private String fileName;
  44. /*
  45.  * This object is from JMF(javax.media.Player)
  46.  */
  47. private Player player;
  48. /*
  49.  * 播放音乐的控制器
  50.  * 实现了音量调节和调整进度等
  51.  * 由JMF实现
  52.  */
  53. private Component control;
  54. /**
  55.  * 初始化面板界面
  56.  */
  57. public Audio(){
  58. jframeAudio.setLayout(new BorderLayout());
  59. /*
  60.  * 将整体规划为3个面板
  61.  */
  62. JPanel jpanelNorth = new JPanel(new FlowLayout());
  63. JPanel jpanelCenter = new JPanel(new FlowLayout());
  64. JPanel jpanelSouth = new JPanel(new GridLayout(3,1));
  65. jframeAudio.add(jpanelNorth, BorderLayout.NORTH);
  66. jframeAudio.add(jpanelCenter, BorderLayout.CENTER);
  67. jframeAudio.add(jpanelSouth, BorderLayout.SOUTH);
  68.     
  69. /*
  70.  * 第一个面板有打开文件夹 选择查看器功能
  71.  */
  72. // 文件选择设计
  73. JButton jbFindFile = new JButton("打开");
  74. jbFindFile.addActionListener(this);
  75. JLabel jlNull = new JLabel("                         ");
  76. // 软件选择面板设计
  77. JButton picture = new JButton("图片查看器"); // 选择图片查看器软件
  78. JButton audio = new JButton("音频查看器"); // 选择音频查看器软件
  79. JButton video = new JButton("视频查看器"); // 选择视频查看器软件
  80. picture.addActionListener(this); // 给按钮添加事件响应
  81. audio.addActionListener(this);
  82. video.addActionListener(this);
  83. jpanelNorth.add(filePath);
  84. jpanelNorth.add(jbFindFile);
  85. jpanelNorth.add(jlNull);
  86. jpanelNorth.add(picture);
  87. jpanelNorth.add(audio);
  88. jpanelNorth.add(video);
  89. /*
  90.  * 第二个面板是显示音频播放信息以及控制播放用的
  91.  */
  92. jpanelCenter.add(jpanelControl,BorderLayout.CENTER);
  93. jpanelControl.add(message,BorderLayout.CENTER);
  94. message.setText("                                 Welcome to use the audio player!");
  95. /*
  96.  * 第三个面板是工具面板 还有添加信息面板
  97.  */
  98. JPanel jpMessage1= new JPanel(new GridLayout(2,1));
  99. JPanel jpMessage1_1= new JPanel(new FlowLayout());
  100. JPanel jpMessage1_2= new JPanel(new FlowLayout());
  101. JPanel jpMessage2= new JPanel(new FlowLayout());
  102. JPanel jpSubmit = new JPanel(new FlowLayout());
  103. jpMessage1.add(jpMessage1_1);
  104. jpMessage1.add(jpMessage1_2);
  105. jpanelSouth.add(jpMessage1);
  106. jpanelSouth.add(jpMessage2);
  107. jpanelSouth.add(jpSubmit);
  108. JLabel jlNumAudio= new JLabel("音频号:");
  109. JLabel jlName= new JLabel("题名:        ");
  110. JLabel jlNumFiles= new JLabel("档案号:     ");
  111. JLabel jlAuthor= new JLabel("摄影者:");
  112. JLabel jlDate= new JLabel("摄影时间:");
  113. JLabel jlPlace= new JLabel("拍摄地点:");
  114. JLabel jlDescription= new JLabel("说明:   ");
  115. JButton jbSubmit = new JButton("提交");
  116. JButton jbReset = new JButton("清空");
  117. //第一个 信息面板
  118. jpMessage1_1.add(jlNumAudio);
  119. jpMessage1_1.add(jtNumAudio);
  120. jpMessage1_1.add(jlName);
  121. jpMessage1_1.add(jtName);
  122. jpMessage1_1.add(jlNumFiles);
  123. jpMessage1_1.add(jtNumFiles);
  124. jpMessage1_2.add(jlAuthor);
  125. jpMessage1_2.add(jtAuthor);
  126. jpMessage1_2.add(jlDate);
  127. jpMessage1_2.add(jtDate);
  128. jpMessage1_2.add(jlPlace);
  129. jpMessage1_2.add(jtPlace);
  130. //第二个 信息面板
  131. jpMessage2.add(jlDescription);
  132. jpMessage2.add(jtDescription);
  133. //工具面板
  134. jpSubmit.add(jbSubmit);
  135. jpSubmit.add(jbReset);
  136. jframeAudio.setSize(670,370);
  137. jframeAudio.setLocation(150, 100); // 窗口起始位置
  138. jframeAudio.setVisible(true);
  139. jframeAudio.setResizable(false);
  140. jframeAudio.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  141. }
  142. //事件的响应
  143. @Override
  144. public void actionPerformed(ActionEvent ae) {
  145. String s= ae.getActionCommand();
  146. if("图片查看器".equals(s)){
  147. new Picture();
  148. jframeAudio.setVisible(false);
  149. }else if("音频查看器".equals(s)){
  150. JOptionPane.showMessageDialog(null, "已经是音频播放页面了!");
  151. }else if("视频查看器".equals(s)){
  152. new Video();
  153. jframeAudio.setVisible(false);
  154. }else if("打开".equals(s)){
  155. fileDialog = new FileDialog(fileDialog);
  156. fileDialog.setVisible(true);
  157. if (fileDialog.getFile() != null) {
  158. filePosition = fileDialog.getDirectory() + fileDialog.getFile();// 原因请见同目录下的FileDialogDemo.java文件
  159. filePath.setText(filePosition);
  160. fileName = fileDialog.getFile();
  161. selectedFile = new File(filePosition);
  162. try {
  163. createPlayer();
  164. } catch (NoPlayerException e) {
  165. e.printStackTrace();
  166. } catch (MalformedURLException e) {
  167. e.printStackTrace();
  168. } catch (IOException e) {
  169. e.printStackTrace();
  170. }
  171. }
  172. }else if("提交".equals(s)){
  173. submit();
  174. }else if("清空".equals(s)){
  175. reset();
  176. }
  177. }
  178. /*
  179.  * 开始播放
  180.  */
  181. private void createPlayer() throws NoPlayerException, MalformedURLException, IOException{
  182. if(player!=null){
  183. stopPlayer();
  184. }
  185. try{
  186. player = Manager.createPlayer(selectedFile.toURL());
  187. player.addControllerListener(new ControllerHand());
  188. player.start();
  189. message.setText("正在播放:"+ fileName);
  190. }catch(Exception e){
  191. JOptionPane.showMessageDialog(null, "本播放器不支持您要播放的格式!", "出错了!",
  192. JOptionPane.ERROR_MESSAGE);
  193. }
  194. }
  195. /*
  196.  * 停止播放
  197.  */
  198. private void stopPlayer(){
  199. player.stop();
  200. player.close();
  201. jpanelControl.remove(control);
  202. message.setText("                                 Welcome to use the audio player!");
  203. }
  204. private void reset(){
  205. jtNumAudio.setText("");
  206. jtName.setText("");
  207. jtNumFiles.setText("");
  208. jtAuthor.setText("");
  209. jtDate.setText("");
  210. jtPlace.setText("");
  211. jtDescription.setText("");
  212. }
  213. private void submit(){
  214. }
  215. public static void main(String[] args) {
  216. new Audio();
  217. }
  218. private class ControllerHand implements ControllerListener {
  219. public void controllerUpdate(ControllerEvent e) {
  220. if (e instanceof RealizeCompleteEvent) {
  221. Component visual = player.getVisualComponent();
  222. control = player.getControlPanelComponent();
  223. if (control != null) {
  224. jpanelControl.add(control,BorderLayout.SOUTH);
  225. }
  226. jpanelControl.doLayout();
  227. return;
  228. }
  229. if (e instanceof EndOfMediaEvent) {
  230.       stopPlayer();
  231.       try {
  232. createPlayer();
  233. } catch (NoPlayerException e1) {
  234. // TODO Auto-generated catch block
  235. e1.printStackTrace();
  236. } catch (MalformedURLException e1) {
  237. // TODO Auto-generated catch block
  238. e1.printStackTrace();
  239. } catch (IOException e1) {
  240. // TODO Auto-generated catch block
  241. e1.printStackTrace();
  242. }
  243. }
  244. }
  245. }
  246. }