PlayFrame.java
上传用户:tbn001
上传日期:2013-11-16
资源大小:9k
文件大小:44k
源码类别:

多媒体编程

开发平台:

Java

  1. package audioplayer;
  2. import java.awt.Dimension;
  3. import javax.swing.JFrame;
  4. import javax.swing.JPanel;
  5. import java.awt.Rectangle;
  6. import javax.swing.JButton;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import javax.swing.JList;
  10. import javax.swing.JLabel;
  11. import javax.swing.DefaultListModel;
  12. import javax.swing.JScrollPane;
  13. import java.awt.Component;
  14. import javax.swing.JOptionPane;
  15. import javax.swing.JToggleButton;
  16. import javax.swing.JMenuBar;
  17. import java.awt.Font;
  18. import javax.swing.JMenu;
  19. import javax.swing.JMenuItem;
  20. import java.awt.Color;
  21. import javax.swing.ImageIcon;
  22. import javax.swing.SwingConstants;
  23. import javax.media.ControllerListener;
  24. import javax.media.Player;
  25. import javax.media.Manager;
  26. import javax.media.MediaLocator;
  27. import javax.media.NoPlayerException;
  28. import javax.media.ControllerEvent;
  29. import javax.media.ControllerClosedEvent;
  30. import javax.media.EndOfMediaEvent;
  31. import javax.media.Time;
  32. import javax.media.PrefetchCompleteEvent;
  33. import javax.media.RealizeCompleteEvent;
  34. import java.awt.FileDialog;
  35. import javax.swing.JPopupMenu;
  36. import java.awt.event.MouseAdapter;
  37. import java.awt.event.MouseEvent;
  38. import java.awt.Event;
  39. import java.awt.BorderLayout;
  40. import java.io.BufferedWriter;
  41. import java.io.FileWriter;
  42. import java.io.FileReader;
  43. import java.io.BufferedReader;
  44. import java.awt.event.KeyAdapter;
  45. import java.awt.event.KeyEvent;
  46. public class PlayFrame extends JFrame implements ControllerListener {
  47.     //num:列表计数器和数组下标
  48.     Integer num = -1;
  49.     //gD:文件路径 gF:文件名
  50.     String[] gD = new String[50];
  51.     String[] gF = new String[50];
  52.     //声明Player变量
  53.     Player player;
  54.     //声明文件读取变量
  55.     FileDialog OpenFileDialog;
  56.     //声明视频窗口变量(visualcom)、播放控制变量(controlcom)
  57.     Component visualcom, controlcom;
  58.     //声明循环控制变量,true为循环播放
  59.     boolean loop = true;
  60.     JPanel contentPane;
  61.     //ConterjPanel:控制面板
  62.     JPanel ConterjPanel = new JPanel();
  63.     //ListjPanel:列表面板
  64.     JPanel ListjPanel = new JPanel();
  65.     ImageIcon[] jb = {new ImageIcon("img\max.gif"),
  66.                      new ImageIcon("img\min.gif"),
  67.                      new ImageIcon("img\repeat.gif"),
  68.                      new ImageIcon("img\shufflerepeat.gif")};
  69.     //PlayjButton:播放按钮
  70.     JButton PlayjButton = new JButton(new ImageIcon("img\play.gif"));
  71.     //PausejButton:暂停按钮
  72.     JButton PausejButton = new JButton(new ImageIcon("img\pause.gif"));
  73.     //StopjButton:停止按钮
  74.     JButton StopjButton = new JButton(new ImageIcon("img\stop.gif"));
  75.     //OpenjButton:打开按钮
  76.     JButton OpenjButton = new JButton(new ImageIcon("img\open.gif"));
  77.     //model为非空模型,用于List的显示
  78.     DefaultListModel model = new DefaultListModel();
  79.     //List:文件列表
  80.     JList List = new JList(model);
  81.     JScrollPane jScrollPanel = new JScrollPane();
  82.     //ListjToggleButton:打开/隐藏列表按钮
  83.     JToggleButton ListjToggleButton = new JToggleButton(jb[1]);
  84.     //NextjButton:下一个
  85.     JButton NextjButton = new JButton(new ImageIcon("img\next.gif"));
  86.     //PreviousjButton:上一个
  87.     JButton PreviousjButton = new JButton(new ImageIcon("img\back.gif"));
  88.     JMenuBar AboutjMenuBar = new JMenuBar();
  89.     JMenu AboutjMenu = new JMenu();
  90.     //HelpjMenuItem:帮助文档
  91.     JMenuItem HelpjMenuItem = new JMenuItem();
  92.     //AboutjMenuItem:版本信息及制作人
  93.     JMenuItem AboutjMenuItem = new JMenuItem();
  94.     //ExitjMenuItem:退出
  95.     JMenuItem ExitjMenuItem = new JMenuItem();
  96.     //NamejLabel:显示当前文件名
  97.     JLabel NamejLabel = new JLabel();
  98.     TestImage Conterimage = new TestImage();
  99.     TestImage Listimage = new TestImage();
  100.     TestImage FileSliderimage = new TestImage();
  101.     //ConterjPopupMenu:右键菜单
  102.     JPopupMenu ConterjPopupMenu = new JPopupMenu();
  103.     JMenuItem PlayjMenuItem = new JMenuItem();
  104.     JMenuItem AddjMenuItem = new JMenuItem();
  105.     JMenuItem DeletejMenuItem = new JMenuItem();
  106.     //repeatjToggleButton:循环/非循环按钮
  107.     JToggleButton repeatjToggleButton = new JToggleButton(jb[3]);
  108.     //FileSliderjPanel用于显示controlcom上的功能键
  109.     JPanel FileSliderjPanel = new JPanel();
  110.     BorderLayout borderLayout1 = new BorderLayout();
  111.     JMenu StartjMenu = new JMenu();
  112.     //LoadjMenuItem:读取已存在的列表(*.dat)
  113.     JMenuItem LoadjMenuItem = new JMenuItem();
  114.     //VideojPanel用于显示视频
  115.     JPanel VideojPanel = new JPanel();
  116.     BorderLayout borderLayout2 = new BorderLayout();
  117.     //SavejMenuItem:保存当前列表(*.dat)
  118.     JMenuItem SavejMenuItem = new JMenuItem();
  119.     KeyEvent e;
  120.     public PlayFrame() {
  121.         try {
  122.             setDefaultCloseOperation(EXIT_ON_CLOSE);
  123.             jbInit();
  124.         } catch (Exception exception) {
  125.             exception.printStackTrace();
  126.         }
  127.     }
  128.     private void jbInit() throws Exception {
  129.         contentPane = (JPanel) getContentPane();
  130.         contentPane.setLayout(null);
  131.         //注册List范围内的右键监听
  132.         List.addMouseListener(new MouseAdapter() {
  133.             public void mouseClicked(MouseEvent event) {
  134.                 if (event.getModifiers() == Event.META_MASK) {
  135.                     ConterjPopupMenu.show(contentPane, event.getX() + 30,
  136.                                           event.getY() + 120);
  137.                 }
  138.             }
  139.         });
  140.         //注册Listimage范围内的右键监听。当 num > 5 时,List范围内的右键菜单会随jScrollPane的卷轴滚动的方向移动,所以我加了一个List周边的右键,以方便使用
  141.         Listimage.addMouseListener(new MouseAdapter() {
  142.             public void mouseClicked(MouseEvent event) {
  143.                 if (event.getModifiers() == Event.META_MASK) {
  144.                     ConterjPopupMenu.show(contentPane, event.getX(),
  145.                                           event.getY() + 87);
  146.                 }
  147.             }
  148.         });
  149.         //注册List范围内的鼠标双击监听(播放所选择的歌曲)
  150.         List.addMouseListener(new MouseAdapter() {
  151.             public void mouseClicked(MouseEvent event) {
  152.                 if (event.getClickCount() == 2 && event.getButton() == 1) {
  153.                     PlayjButton.doClick();
  154.                 }
  155.             }
  156.         });
  157.         //添加List范围内的删除按钮的快捷键(Delete)
  158.         List.addKeyListener(new KeyAdapter() {
  159.             public void keyPressed(KeyEvent e) {
  160.                 if (e.getKeyCode() == e.VK_DELETE) {
  161.                     DeletejMenuItem.doClick();
  162.                     List.setSelectedIndex(List.getSelectedIndex());
  163.                 }
  164.             }
  165.         });
  166.         //添加List范围内的添加歌曲按钮的快捷键(insert)
  167.         List.addKeyListener(new KeyAdapter() {
  168.             public void keyPressed(KeyEvent e) {
  169.                 if (e.getKeyCode() == e.VK_INSERT) {
  170.                     AddjMenuItem.doClick();
  171.                 }
  172.             }
  173.         });
  174.         //添加List范围内的帮助按钮的快捷键(F1)
  175.                 List.addKeyListener(new KeyAdapter() {
  176.                     public void keyPressed(KeyEvent e) {
  177.                         if (e.getKeyCode() == e.VK_F1) {
  178.                             HelpjMenuItem.doClick();
  179.                         }
  180.                     }
  181.         });
  182.         /*//添加List范围内的下一个按钮的快捷键(->)
  183.         List.addKeyListener(new KeyAdapter() {
  184.             public void keyPressed(KeyEvent e) {
  185.                 if (e.getKeyCode() == e.VK_RIGHT) {
  186.                     NextjButton.doClick();
  187.                 }
  188.             }
  189.         });
  190.         //添加List范围内的上一个按钮的快捷键(<-)
  191.         List.addKeyListener(new KeyAdapter() {
  192.             public void keyPressed(KeyEvent e) {
  193.                 if (e.getKeyCode() == e.VK_LEFT) {
  194.                     PreviousjButton.doClick();
  195.                 }
  196.             }
  197.         });
  198.         //添加List范围内的播放按钮的快捷键(Enter)
  199.         List.addKeyListener(new KeyAdapter() {
  200.             public void keyPressed(KeyEvent e) {
  201.                 if (e.getKeyCode() == e.VK_ENTER) {
  202.                     PlayjButton.doClick();
  203.                 }
  204.             }
  205.         });
  206.         //添加List范围内的停止按钮的快捷键(S)
  207.         List.addKeyListener(new KeyAdapter() {
  208.             public void keyPressed(KeyEvent e) {
  209.                 if (e.getKeyCode() == e.VK_S) {
  210.                     StopjButton.doClick();
  211.                 }
  212.             }
  213.         });
  214.         //添加List范围内的播放列表按钮的快捷键(L)
  215.         List.addKeyListener(new KeyAdapter() {
  216.             public void keyPressed(KeyEvent e) {
  217.                 if (e.getKeyCode() == e.VK_L) {
  218.                     ListjToggleButton.doClick();
  219.                 }
  220.             }
  221.         });
  222.         //添加List范围内的播放模式按钮的快捷键(R)
  223.         List.addKeyListener(new KeyAdapter() {
  224.             public void keyPressed(KeyEvent e) {
  225.                 if (e.getKeyCode() == e.VK_R) {
  226.                     repeatjToggleButton.doClick();
  227.                 }
  228.             }
  229.         });*/
  230.         this.getContentPane().setBackground(new Color(212, 138, 200));
  231.         this.setJMenuBar(AboutjMenuBar);
  232.         this.setResizable(false);
  233.         setSize(new Dimension(213, 345));
  234.         setTitle("AudioPlayer 1.0");
  235.         contentPane.setBackground(new Color(212, 208, 200));
  236.         contentPane.setRequestFocusEnabled(true);
  237.         ConterjPanel.setBounds(new Rectangle(0, 0, 213, 85));
  238.         ConterjPanel.setLayout(null);
  239.         ListjPanel.setBounds(new Rectangle(0, 87, 213, 213));
  240.         ListjPanel.setLayout(null);
  241.         PlayjButton.setBackground(new Color(212, 208, 200));
  242.         PlayjButton.setBounds(new Rectangle(57, 16, 22, 17));
  243.         PlayjButton.addActionListener(new PlayFrame_PlayjButton_actionAdapter(this));
  244.         PausejButton.setBackground(new Color(212, 208, 200));
  245.         PausejButton.setBounds(new Rectangle(78, 16, 24, 17));
  246.         PausejButton.addActionListener(new PlayFrame_PausejButton_actionAdapter(this));
  247.         StopjButton.setBackground(new Color(212, 208, 200));
  248.         StopjButton.setBounds(new Rectangle(101, 16, 25, 17));
  249.         StopjButton.addActionListener(new PlayFrame_StopjButton_actionAdapter(this));
  250.         OpenjButton.setBackground(new Color(212, 208, 200));
  251.         OpenjButton.setBounds(new Rectangle(147, 16, 24, 17));
  252.         OpenjButton.addActionListener(new PlayFrame_OpenjButton_actionAdapter(this));
  253.         jScrollPanel.setBounds(new Rectangle(30, 31, 149, 145));
  254.         ListjToggleButton.setBackground(new Color(212, 208, 200));
  255.         ListjToggleButton.setBounds(new Rectangle(172, 72, 28, 13));
  256.         ListjToggleButton.addActionListener(new
  257.                                             PlayFrame_ListjToggleButton_actionAdapter(this));
  258.         NextjButton.setBackground(new Color(212, 208, 200));
  259.         NextjButton.setBounds(new Rectangle(125, 16, 23, 17));
  260.         NextjButton.addActionListener(new PlayFrame_NextjButton_actionAdapter(this));
  261.         PreviousjButton.setBackground(new Color(212, 208, 200));
  262.         PreviousjButton.setBounds(new Rectangle(34, 16, 23, 17));
  263.         PreviousjButton.addActionListener(new
  264.                                           PlayFrame_PreviousjButton_actionAdapter(this));
  265.         AboutjMenuBar.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  266.         AboutjMenu.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  267.         AboutjMenu.setText("About");
  268.         HelpjMenuItem.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  269.         HelpjMenuItem.setText("Help");
  270.         HelpjMenuItem.addActionListener(new
  271.                                         PlayFrame_HelpjMenuItem_actionAdapter(this));
  272.         AboutjMenuItem.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  273.         AboutjMenuItem.setText("About Me");
  274.         AboutjMenuItem.addActionListener(new
  275.                                          PlayFrame_AboutjMenuItem_actionAdapter(this));
  276.         ExitjMenuItem.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  277.         ExitjMenuItem.setText("Exit");
  278.         ExitjMenuItem.addActionListener(new
  279.                                         PlayFrame_ExitjMenuItem_actionAdapter(this));
  280.         NamejLabel.setFont(new java.awt.Font("宋体", Font.BOLD, 14));
  281.         NamejLabel.setForeground(new Color(125, 59, 72));
  282.         NamejLabel.setHorizontalAlignment(SwingConstants.CENTER);
  283.         NamejLabel.setBounds(new Rectangle(24, 0, 158, 14));
  284.         Listimage.setBounds(new Rectangle(0, 0, 10, 10));
  285.         PlayjMenuItem.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  286.         PlayjMenuItem.setText("Play");
  287.         PlayjMenuItem.addActionListener(new
  288.                                         PlayFrame_PlayjMenuItem_actionAdapter(this));
  289.         AddjMenuItem.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  290.         AddjMenuItem.setText("Add");
  291.         AddjMenuItem.addActionListener(new PlayFrame_AddjMenuItem_actionAdapter(this));
  292.         DeletejMenuItem.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  293.         DeletejMenuItem.setText("Delete");
  294.         DeletejMenuItem.addActionListener(new
  295.                                           PlayFrame_DeletejMenuItem_actionAdapter(this));
  296.         repeatjToggleButton.setToolTipText("");
  297.         repeatjToggleButton.setBounds(new Rectangle(33, 38, 26, 14));
  298.         repeatjToggleButton.addActionListener(new
  299.                                               PlayFrame_repeatjToggleButton_actionAdapter(this));
  300.         FileSliderjPanel.setBounds(new Rectangle(33, 54, 144, 18));
  301.         FileSliderjPanel.setLayout(borderLayout1);
  302.         StartjMenu.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  303.         StartjMenu.setText("Start");
  304.         LoadjMenuItem.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  305.         LoadjMenuItem.setText("Load");
  306.         LoadjMenuItem.addActionListener(new
  307.                                         PlayFrame_LoadjMenuItem_actionAdapter(this));
  308.         VideojPanel.setBounds(new Rectangle(212, 0, 318, 294));
  309.         VideojPanel.setLayout(borderLayout2);
  310.         SavejMenuItem.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
  311.         SavejMenuItem.setText("Save");
  312.         SavejMenuItem.addActionListener(new
  313.                                         PlayFrame_SavejMenuItem_actionAdapter(this));
  314.         contentPane.add(ListjPanel);
  315.         contentPane.add(ConterjPanel);
  316.         AboutjMenuBar.add(StartjMenu);
  317.         AboutjMenuBar.add(AboutjMenu);
  318.         AboutjMenu.add(HelpjMenuItem);
  319.         AboutjMenu.add(AboutjMenuItem);
  320.         ListjPanel.add(Listimage);
  321.         Listimage.add(jScrollPanel);
  322.         jScrollPanel.getViewport().add(List);
  323.         Listimage.setLayout(null);
  324.         Listimage.setBounds(new Rectangle(0, 0, 207, 207));
  325.         Listimage.setImage("img\Listjpanel.gif");
  326.         Listimage.setSize(207, 207);
  327.         ListjPanel.add(Listimage);
  328.         Conterimage.setLayout(null);
  329.         Conterimage.setBounds(new Rectangle(0, 0, 213, 85));
  330.         Conterimage.setImage("img\conterjpanel.gif");
  331.         Conterimage.setSize(203, 85);
  332.         ConterjPanel.add(Conterimage);
  333.         ConterjPanel.add(VideojPanel);
  334.         FileSliderimage.setLayout(null);
  335.         FileSliderimage.setBounds(new Rectangle(0, 0));
  336.         FileSliderimage.setImage("img\FileSlider.gif");
  337.         FileSliderimage.setSize(180, 25);
  338.         FileSliderjPanel.add(FileSliderimage);
  339.         Conterimage.add(ListjToggleButton);
  340.         Conterimage.add(repeatjToggleButton);
  341.         Conterimage.add(NamejLabel);
  342.         Conterimage.add(PreviousjButton);
  343.         Conterimage.add(PlayjButton);
  344.         Conterimage.add(PausejButton);
  345.         Conterimage.add(OpenjButton);
  346.         Conterimage.add(NextjButton);
  347.         Conterimage.add(StopjButton);
  348.         Conterimage.add(FileSliderjPanel);
  349.         ConterjPopupMenu.add(PlayjMenuItem);
  350.         ConterjPopupMenu.add(AddjMenuItem);
  351.         ConterjPopupMenu.add(DeletejMenuItem);
  352.         StartjMenu.add(SavejMenuItem);
  353.         StartjMenu.add(LoadjMenuItem);
  354.         StartjMenu.add(ExitjMenuItem);
  355.         PlayjButton.setToolTipText("Play");
  356.         StopjButton.setToolTipText("Stop");
  357.         repeatjToggleButton.setToolTipText("Repeat");
  358.         ListjToggleButton.setToolTipText("List");
  359.         NextjButton.setToolTipText("Next");
  360.         PreviousjButton.setToolTipText("Previous");
  361.         PausejButton.setToolTipText("Pause");
  362.         OpenjButton.setToolTipText("Open");
  363.         repeatjToggleButton.setMnemonic(e.VK_R);
  364.         StopjButton.setMnemonic(e.VK_S);
  365.         PlayjButton.setMnemonic(e.VK_ENTER);
  366.         ListjToggleButton.setMnemonic(e.VK_L);
  367.         NextjButton.setMnemonic(e.VK_RIGHT);
  368.         PreviousjButton.setMnemonic(e.VK_LEFT);
  369.         PausejButton.setMnemonic(e.VK_P);
  370.         //运行时读取已存在的列表,若列表为空,则不读取
  371.         try {
  372.             FileReader nr = new FileReader("num.dat");
  373.             BufferedReader bnr = new BufferedReader(nr);
  374.             FileReader fr = new FileReader("file.dat");
  375.             BufferedReader br = new BufferedReader(fr);
  376.             FileReader fn = new FileReader("name.dat");
  377.             BufferedReader bn = new BufferedReader(fn);
  378.             String num1 = bnr.readLine();
  379.             bnr.close();
  380.             if (num1 != null) {
  381.                 try {
  382.                     //num要记录数组下标
  383.                     num = Integer.parseInt(num1);
  384.                 } catch (Exception ex) {
  385.                     JOptionPane.showMessageDialog(this, ex,
  386.                                                   "AudioPlayer 1.0",
  387.                                                   JOptionPane.CLOSED_OPTION);
  388.                 }
  389.             }
  390.             for (int i = 0; i <= num; i++) {
  391.                 gF[i] = bn.readLine();
  392.                 gD[i] = br.readLine();
  393.             }
  394.             //将读取到的文件名加载到List当中
  395.             if (num >= 0 && gD[num] != null && gF[num] != null) {
  396.                 for (int i = 0; i <= num; i++) {
  397.                     model.addElement(gF[i].toString());
  398.                 }
  399.                 br.close();
  400.                 bn.close();
  401.                 //指向List中第一个索引处,此处设计是为了防止部分具有播放功能的按钮不会出现异常
  402.                 List.setSelectedIndex(0);
  403.             }
  404.         } catch (Exception ex) {
  405.             JOptionPane.showMessageDialog(this, ex,
  406.                                           "AudioPlayer 1.0",
  407.                                           JOptionPane.CLOSED_OPTION);
  408.         }
  409.         this.SavejMenuItem.setEnabled(false);
  410.         this.LoadjMenuItem.setEnabled(false);
  411.     }
  412.     //点击播放器上部About下拉菜单,点击AboutjMenuItem显示版本信息和制作人
  413.     public void AboutjMenuItem_actionPerformed(ActionEvent e) {
  414.         JOptionPane.showMessageDialog(this, "版本:1.0nWilliam组 制作   [2006年12月]",
  415.                                       "AudioPlayer 1.0",
  416.                                       JOptionPane.CLOSED_OPTION);
  417.     }
  418.     //点击ListjToggleButton打开/隐藏列表
  419.     public void ListjToggleButton_actionPerformed(ActionEvent e) {
  420.         if (ListjToggleButton.isSelected()) {
  421.             //只显示控制面板的内容
  422.             this.setSize(213, 132);
  423.             this.setVisible(true);
  424.             //设置按钮的图片
  425.             ListjToggleButton.setIcon(jb[0]);
  426.         } else {
  427.             //当有视频窗口时要显示视频窗口,否则隐藏视频窗口
  428.             if (visualcom != null) {
  429.                 this.setSize(539, 345);
  430.             } else {
  431.                 this.setSize(213, 345);
  432.             }
  433.             this.setVisible(true);
  434.             //设置按钮的图片
  435.             ListjToggleButton.setIcon(jb[1]);
  436.         }
  437.     }
  438.     //点击OpenjButton打开文件选择对话框,选择后,并播放所选文件
  439.     public void OpenjButton_actionPerformed(ActionEvent e) {
  440.         try {
  441.             ++num;
  442.             //先创建一个对话框对象,标题设置为“打开媒体文件”
  443.             OpenFileDialog = new FileDialog(this, "打开媒体文件", FileDialog.LOAD);
  444.             //设置该对话框的当前目录为上一次打开的目录
  445.             OpenFileDialog.setDirectory(gD[num]);
  446.             OpenFileDialog.setVisible(true);
  447.             if (OpenFileDialog.getFile() == null) {
  448.                 --num;
  449.             } else {
  450.                 //将已选择文件的路径存入数组
  451.                 gD[num] = OpenFileDialog.getDirectory();
  452.                 //将已选择文件的文件名存入数组
  453.                 gF[num] = OpenFileDialog.getFile();
  454.                 //如果JMF播放器对象存在,就关闭该播放器对象
  455.                 if (player != null)
  456.                     player.close();
  457.                 try {
  458.                     //根据指定的目录和文件名创建一个媒体定位器(MediaLocator)对象,再利用该媒体定位器对象创建一个JMF播放器对象
  459.                     player = Manager.createPlayer(new MediaLocator("file:" +
  460.                             gD[num] +
  461.                             gF[num]));
  462.                 } catch (java.io.IOException ex) {
  463.                     JOptionPane.showMessageDialog(this, ex,
  464.                                                   "AudioPlayer 1.0",
  465.                                                   JOptionPane.CLOSED_OPTION);
  466.                     return;
  467.                 } catch (NoPlayerException e2) {
  468.                     JOptionPane.showMessageDialog(this, "不能找到播放器.",
  469.                                                   "AudioPlayer 1.0",
  470.                                                   JOptionPane.CLOSED_OPTION);
  471.                     return;
  472.                 }
  473.                 if (player == null) {
  474.                     JOptionPane.showMessageDialog(this, "无法创建播放器.",
  475.                                                   "AudioPlayer 1.0",
  476.                                                   JOptionPane.CLOSED_OPTION);
  477.                     return;
  478.                 }
  479.                 //将PlayerFrame对象注册为来自JMF播放器对象的控制器事件的动作监听器
  480.                 player.addControllerListener(this);
  481.                 //让JMF播放器对象预先提取媒体文件的内容
  482.                 player.prefetch();
  483.                 //将已选中的文件加载到List当中
  484.                 model.addElement(gF[num].toString());
  485.                 //在播放器上方显示当前播放的文件名
  486.                 NamejLabel.setText(gF[num].toString());
  487.                 //List中显示当前播放的文件
  488.                 List.setSelectedIndex(num);
  489.                 this.SavejMenuItem.setEnabled(true);
  490.                 this.LoadjMenuItem.setEnabled(true);
  491.             }
  492.         } catch (Exception ex) {
  493.             JOptionPane.showMessageDialog(this, ex,
  494.                                           "AudioPlayer 1.0",
  495.                                           JOptionPane.CLOSED_OPTION);
  496.         }
  497.     }
  498.     //点击PlayjButton播放List中当前所选的文件
  499.     public void PlayjButton_actionPerformed(ActionEvent e) {
  500.         //判断播放列表是否为空,如果不为空则播放List中当前所选择的文件,否则弹出消息框
  501.         if (model.isEmpty() == true) {
  502.             JOptionPane.showMessageDialog(this, "NO Music File",
  503.                                           "AudioPlayer 1.0",
  504.                                           JOptionPane.CLOSED_OPTION);
  505.         } else {
  506.             //如果JMF播放器对象存在,就关闭该播放器对象
  507.             if (player != null)
  508.                 player.close();
  509.             try {
  510.                 //根据指定的目录和文件名创建一个媒体定位器(MediaLocator)对象,再利用该媒体定位器对象创建一个JMF播放器对象
  511.                 player = Manager.createPlayer(new MediaLocator("file:" +
  512.                         gD[List.getSelectedIndex()] + gF[List.getSelectedIndex()]));
  513.             } catch (java.io.IOException ex) {
  514.                 JOptionPane.showMessageDialog(this, ex,
  515.                                               "AudioPlayer 1.0",
  516.                                               JOptionPane.CLOSED_OPTION);
  517.                 return;
  518.             } catch (NoPlayerException ex) {
  519.                 JOptionPane.showMessageDialog(this, "不能找到播放器.",
  520.                                               "AudioPlayer 1.0",
  521.                                               JOptionPane.CLOSED_OPTION);
  522.                 return;
  523.             }
  524.             if (player == null) {
  525.                 JOptionPane.showMessageDialog(this, "无法创建播放器.",
  526.                                               "AudioPlayer 1.0",
  527.                                               JOptionPane.CLOSED_OPTION);
  528.                 return;
  529.             }
  530.             //将PlayerFrame对象注册为来自JMF播放器对象的控制器事件的动作监听器
  531.             player.addControllerListener(this);
  532.             //最后,让JMF播放器对象预先提取媒体文件的内容
  533.             player.prefetch();
  534.             //在播放器上方显示当前播放的文件名
  535.             NamejLabel.setText(List.getSelectedValue().toString());
  536.         }
  537.     }
  538.     //点击PausejButton暂停List中当前所选的文件
  539.     public void PausejButton_actionPerformed(ActionEvent e) {
  540.         try {
  541.             player.stop();
  542.         } catch (Exception ex) {
  543.             JOptionPane.showMessageDialog(this, ex, "AudioPlayer 1.0",
  544.                                           JOptionPane.CLOSED_OPTION);
  545.         }
  546.     }
  547.     //点击StopjButton停止List中当前所选的文件
  548.     public void StopjButton_actionPerformed(ActionEvent e) {
  549.         try {
  550.             if (player != null) {
  551.                 player.stop();
  552.                 player.setMediaTime(new Time(0));
  553.             }
  554.         } catch (Exception ex) {
  555.             JOptionPane.showMessageDialog(this, ex,
  556.                                           "AudioPlayer 1.0",
  557.                                           JOptionPane.CLOSED_OPTION);
  558.         }
  559.     }
  560.     //点击NextjButton指向List中当前所选的文件的下一个文件
  561.     public void NextjButton_actionPerformed(ActionEvent e) {
  562.         try {
  563.             //如果当前文件为最后一个则指向第一个文件,否则指向下一个文件
  564.             if (List.getSelectedIndex() == num) {
  565.                 List.setSelectedIndex(0);
  566.                 NamejLabel.setText(List.getSelectedValue().toString());
  567.             } else {
  568.                 List.setSelectedIndex(List.getSelectedIndex() + 1);
  569.                 NamejLabel.setText(List.getSelectedValue().toString());
  570.             }
  571.         } catch (Exception ex) {
  572.             JOptionPane.showMessageDialog(this, "NO File", "AudioPlayer 1.0",
  573.                                           JOptionPane.CLOSED_OPTION);
  574.         } finally {
  575.             //播放List中当前指向的文件
  576.             if (model.isEmpty() != true) {
  577.                 if (gF[List.getSelectedIndex()] == null)
  578.                     return;
  579.                 if (player != null)
  580.                     player.close();
  581.                 try {
  582.                     player = Manager.createPlayer(new MediaLocator("file:" +
  583.                             gD[List.getSelectedIndex()] +
  584.                             gF[List.getSelectedIndex()]));
  585.                 } catch (java.io.IOException e2) {
  586.                     JOptionPane.showMessageDialog(this, e2,
  587.                                                   "AudioPlayer 1.0",
  588.                                                   JOptionPane.CLOSED_OPTION);
  589.                     return;
  590.                 } catch (NoPlayerException e2) {
  591.                     JOptionPane.showMessageDialog(this, "不能找到播放器.",
  592.                                                   "AudioPlayer 1.0",
  593.                                                   JOptionPane.CLOSED_OPTION);
  594.                     return;
  595.                 }
  596.                 if (player == null) {
  597.                     JOptionPane.showMessageDialog(this, "无法创建播放器.",
  598.                                                   "AudioPlayer 1.0",
  599.                                                   JOptionPane.CLOSED_OPTION);
  600.                     return;
  601.                 }
  602.                 player.addControllerListener(this);
  603.                 player.prefetch();
  604.             }
  605.         }
  606.     }
  607.     //点击PreviousjButton指向List中当前所选的文件的上一个文件
  608.     public void PreviousjButton_actionPerformed(ActionEvent e) {
  609.         try {
  610.             //如果当前文件为第一个则指向最后一个文件,否则指向上一个文件
  611.             if (List.getSelectedIndex() == 0) {
  612.                 List.setSelectedIndex(num);
  613.                 NamejLabel.setText(List.getSelectedValue().toString());
  614.             } else {
  615.                 List.setSelectedIndex(List.getSelectedIndex() - 1);
  616.                 NamejLabel.setText(List.getSelectedValue().toString());
  617.             }
  618.         } catch (Exception ex) {
  619.             JOptionPane.showMessageDialog(this, "NO File", "AudioPlayer 1.0",
  620.                                           JOptionPane.CLOSED_OPTION);
  621.         } finally {
  622.             //播放List中当前指向的文件
  623.             if (model.isEmpty() != true) {
  624.                 if (gF[List.getSelectedIndex()] == null)
  625.                     return;
  626.                 if (player != null)
  627.                     player.close();
  628.                 try {
  629.                     player = Manager.createPlayer(new MediaLocator("file:" +
  630.                             gD[List.getSelectedIndex()] +
  631.                             gF[List.getSelectedIndex()]));
  632.                 } catch (java.io.IOException ex) {
  633.                     JOptionPane.showMessageDialog(this, ex,
  634.                                                   "AudioPlayer 1.0",
  635.                                                   JOptionPane.CLOSED_OPTION);
  636.                     return;
  637.                 } catch (NoPlayerException ex) {
  638.                     JOptionPane.showMessageDialog(this, "不能找到播放器.",
  639.                                                   "AudioPlayer 1.0",
  640.                                                   JOptionPane.CLOSED_OPTION);
  641.                     return;
  642.                 }
  643.                 if (player == null) {
  644.                     JOptionPane.showMessageDialog(this, "无法创建播放器.",
  645.                                                   "AudioPlayer 1.0",
  646.                                                   JOptionPane.CLOSED_OPTION);
  647.                     return;
  648.                 }
  649.                 player.addControllerListener(this);
  650.                 player.prefetch();
  651.             }
  652.         }
  653.     }
  654.     //退出播放器
  655.     public void ExitjMenuItem_actionPerformed(ActionEvent e) {
  656.         if (player != null) {
  657.             player.close();
  658.             player.stop();
  659.         }
  660.         System.exit(0);
  661.     }
  662.     //Player 播放器对象的控制器事件的动作监听器
  663.     public void controllerUpdate(ControllerEvent e) {
  664.         //如果播放器被关闭时
  665.         if (e instanceof ControllerClosedEvent) {
  666.             //如果视频部件还存在,从VideojPanel面板中删除该视频部件
  667.             if (visualcom != null) {
  668.                 VideojPanel.remove(visualcom);
  669.                 visualcom = null;
  670.             }
  671.             //如果控制面板部件还存在,从FileSliderjPanel面板中删除该控制面板部件
  672.             if (controlcom != null) {
  673.                 FileSliderjPanel.remove(controlcom);
  674.                 controlcom = null;
  675.             }
  676.             return;
  677.         }
  678.         //当媒体播放结束时
  679.         if (e instanceof EndOfMediaEvent) {
  680.             //如果当前为“循环播放”状态
  681.             if (loop) {
  682.                 if (List.getSelectedIndex() == num) {
  683.                     List.setSelectedIndex(0);
  684.                     NamejLabel.setText(List.getSelectedValue().toString());
  685.                 } else {
  686.                     List.setSelectedIndex(List.getSelectedIndex() + 1);
  687.                     NamejLabel.setText(List.getSelectedValue().toString());
  688.                 }
  689.                 player.close();
  690.                 //复位JMF播放器对象的开始时间
  691.                 player.setMediaTime(new Time(0));
  692.                 //让JMF播放器对象播放下一个文件
  693.                 try {
  694.                     player = Manager.createPlayer(new MediaLocator("file:" +
  695.                             gD[List.getSelectedIndex()] +
  696.                             gF[List.getSelectedIndex()]));
  697.                     player.addControllerListener(this);
  698.                     player.prefetch();
  699.                 } catch (Exception ex) {
  700.                 }
  701.             }
  702.             return;
  703.         }
  704.         //如果预取媒体文件内容结束时
  705.         if (e instanceof PrefetchCompleteEvent) {
  706.             //让JMF播放器对象开始播放该媒体
  707.             player.start();
  708.             return;
  709.         }
  710.         //当实例化(Realize)媒体文件完成时
  711.         if (e instanceof RealizeCompleteEvent) {
  712.             //获取JMF播放器对象的视频部件
  713.             visualcom = player.getVisualComponent();
  714.             //如果视频部件存在,将视频部件加入到VideojPanel面板的中央
  715.             if (visualcom != null) {
  716.                 this.VideojPanel.add(visualcom, BorderLayout.CENTER);
  717.             }
  718.             //获取JMF播放器对象的控制面板部件
  719.             controlcom = player.getControlPanelComponent();
  720.             //如果控制面板部件存在,将控制面板部件加入到FileSliderjPanel面板的中央
  721.             if (controlcom != null)
  722.                 this.FileSliderjPanel.add(controlcom, BorderLayout.SOUTH);
  723.             //执行pack操作
  724.             this.pack();
  725.             //如果视频部件存在,将打开视频窗口,否则隐藏视频窗口
  726.             if (visualcom != null) {
  727.                 this.setSize(539, 345);
  728.             } else {
  729.                 this.setSize(213, 345);
  730.             }
  731.             this.setVisible(true);
  732.         }
  733.     }
  734.     //点击repeatjToggleButton来设置当前循环模式
  735.     public void repeatjToggleButton_actionPerformed(ActionEvent e) {
  736.         if (repeatjToggleButton.isSelected()) {
  737.             repeatjToggleButton.setIcon(jb[2]);
  738.             loop = false;
  739.         } else {
  740.             repeatjToggleButton.setIcon(jb[3]);
  741.             loop = true;
  742.         }
  743.     }
  744.     //右键点击DeletejMenuItem删除List中当前所选的文件,删除后,选择到最大索引处
  745.     public void DeletejMenuItem_actionPerformed(ActionEvent e) {
  746.         try {
  747.             //如果List不为空则删除当前所选的文件
  748.             if (List.getMaxSelectionIndex() != -1) {
  749.                 int m = List.getMaxSelectionIndex();
  750.                 gD[m] = null;
  751.                 gF[m] = null;
  752.                 for (int i = m; i <= num; i++) {
  753.                     gD[i] = gD[i + 1];
  754.                     gF[i] = gF[i + 1];
  755.                 }
  756.                 model.remove(List.getSelectedIndex());
  757.                 List.setSelectedIndex(List.getSelectedIndex() + num);
  758.                 --num;
  759.             }
  760.         } catch (Exception ex) {
  761.         }
  762.         this.SavejMenuItem.setEnabled(true);
  763.         this.LoadjMenuItem.setEnabled(true);
  764.     }
  765.     //右键点击AddjMenuItem,将弹出文件添加对话框,选择文件后,将添加到List末尾
  766.     public void AddjMenuItem_actionPerformed(ActionEvent e) {
  767.         try {
  768.             ++num;
  769.             //创建一个对话框对象,标题设置为“添加媒体文件”
  770.             OpenFileDialog = new FileDialog(this, "添加媒体文件", FileDialog.LOAD);
  771.             OpenFileDialog.setDirectory(gD[num]);
  772.             OpenFileDialog.setVisible(true);
  773.             if (OpenFileDialog.getFile() == null) {
  774.                 --num;
  775.             } else {
  776.                 gD[num] = OpenFileDialog.getDirectory();
  777.                 gF[num] = OpenFileDialog.getFile();
  778.                 //将所选的文件添加到List末尾
  779.                 model.addElement(gF[num].toString());
  780.             }
  781.         } catch (Exception ex) {
  782.         }
  783.         this.SavejMenuItem.setEnabled(true);
  784.         this.LoadjMenuItem.setEnabled(true);
  785.     }
  786.     //右键点击PlayjMenuItem,将播放List中当前所选的文件
  787.     public void PlayjMenuItem_actionPerformed(ActionEvent e) {
  788.         //此处是直接调用PlayjButton事件的动作监听
  789.         this.PlayjButton_actionPerformed(e);
  790.     }
  791.     //点击播放器上部About下拉菜单,点击Help,将弹出帮助文档
  792.     public void HelpjMenuItem_actionPerformed(ActionEvent e) {
  793.         Runtime rt = Runtime.getRuntime();
  794.         try {
  795.             rt.exec("hh.exe help.chm");
  796.         } catch (Exception ex) {
  797.         }
  798.     }
  799.     //点击播放器上部Start下拉菜单,点击SavejMenuItem,将保存当前List中的全部索引
  800.     public void SavejMenuItem_actionPerformed(ActionEvent e) {
  801.         this.LoadjMenuItem.setEnabled(true);
  802.         try {
  803.             //file.dat存储当前列表中的所有文件的路径
  804.             FileWriter fw = new FileWriter("file.dat");
  805.             BufferedWriter bw = new BufferedWriter(fw);
  806.             //name.dat存储当前列表中的所有文件的文件名
  807.             FileWriter fn = new FileWriter("name.dat");
  808.             BufferedWriter bn = new BufferedWriter(fn);
  809.             //将gD和gF分别保存到file.dat和name.dat文件中
  810.             for (int i = 0; i <= num; i++) {
  811.                 bw.write(gD[i]);
  812.                 bw.newLine();
  813.                 bn.write(gF[i]);
  814.                 bn.newLine();
  815.             }
  816.             bw.flush();
  817.             bn.flush();
  818.             bn.close();
  819.             fw.close();
  820.         } catch (Exception ex) {
  821.             JOptionPane.showMessageDialog(this, ex,
  822.                                           "AudioPlayer 1.0",
  823.                                           JOptionPane.CLOSED_OPTION);
  824.         }
  825.         try {
  826.             //num.dat存储当前列表中的文件个数
  827.             FileWriter nw = new FileWriter("num.dat");
  828.             BufferedWriter bnw = new BufferedWriter(nw);
  829.             //为了保证当List不为空时,保存num到num.dat文件,num.dat所保存的数据是String类型,将来要读取的时候一定要进行类型转换
  830.             if (num >= 0 && gF[0] != null) {
  831.                 bnw.write(num.toString());
  832.             }
  833.             bnw.flush();
  834.             nw.close();
  835.         } catch (Exception ex) {
  836.             JOptionPane.showMessageDialog(this, ex,
  837.                                           "AudioPlayer 1.0",
  838.                                           JOptionPane.CLOSED_OPTION);
  839.         }
  840.         this.SavejMenuItem.setEnabled(false);
  841.     }
  842.     //点击播放器上部Start下拉菜单,点击LoadjMenuItem,将读取上一次所保存的文件
  843.     public void LoadjMenuItem_actionPerformed(ActionEvent e) {
  844.         if (num != 0) {
  845.             for (int i = num; i >= 0; i--) {
  846.                 model.remove(i);
  847.             }
  848.         }
  849.         try {
  850.             FileReader nr = new FileReader("num.dat");
  851.             BufferedReader bnr = new BufferedReader(nr);
  852.             FileReader fr = new FileReader("file.dat");
  853.             BufferedReader br = new BufferedReader(fr);
  854.             FileReader fn = new FileReader("name.dat");
  855.             BufferedReader bn = new BufferedReader(fn);
  856.             //读取上一次所保存的文件个数
  857.             String num1 = bnr.readLine();
  858.             bnr.close();
  859.             //因为num1是String类型,这里要进行转换成Integer类型
  860.             if (num1 != null) {
  861.                 try {
  862.                     num = Integer.parseInt(num1);
  863.                 } catch (Exception ex) {
  864.                     JOptionPane.showMessageDialog(this, ex,
  865.                                                   "AudioPlayer 1.0",
  866.                                                   JOptionPane.CLOSED_OPTION);
  867.                 }
  868.             }
  869.             //读取上一次所保存的所有文件的路径及文件名,并储存到数组中
  870.             try {
  871.                 for (int i = 0; i <= num; i++) {
  872.                     gF[i] = bn.readLine();
  873.                     gD[i] = br.readLine();
  874.                 }
  875.             } catch (Exception ex) {
  876.                 JOptionPane.showMessageDialog(this, "无曲目,请添加曲目",
  877.                                               "AudioPlayer 1.0",
  878.                                               JOptionPane.CLOSED_OPTION);
  879.             }
  880.             //将所读取到的文件加载到List的末尾
  881.             if (num >= 0 && gD[num] != null && gF[num] != null) {
  882.                 for (int i = 0; i <= num; i++) {
  883.                     model.addElement(gF[i].toString());
  884.                 }
  885.             }
  886.             br.close();
  887.             bn.close();
  888.         } catch (Exception ex) {
  889.             JOptionPane.showMessageDialog(this, ex,
  890.                                           "AudioPlayer 1.0",
  891.                                           JOptionPane.CLOSED_OPTION);
  892.         }
  893.         this.LoadjMenuItem.setEnabled(false);
  894.         this.SavejMenuItem.setEnabled(true);
  895.     }
  896. }
  897. class PlayFrame_SavejMenuItem_actionAdapter implements ActionListener {
  898.     private PlayFrame adaptee;
  899.     PlayFrame_SavejMenuItem_actionAdapter(PlayFrame adaptee) {
  900.         this.adaptee = adaptee;
  901.     }
  902.     public void actionPerformed(ActionEvent e) {
  903.         adaptee.SavejMenuItem_actionPerformed(e);
  904.     }
  905. }
  906. class PlayFrame_LoadjMenuItem_actionAdapter implements ActionListener {
  907.     private PlayFrame adaptee;
  908.     PlayFrame_LoadjMenuItem_actionAdapter(PlayFrame adaptee) {
  909.         this.adaptee = adaptee;
  910.     }
  911.     public void actionPerformed(ActionEvent e) {
  912.         adaptee.LoadjMenuItem_actionPerformed(e);
  913.     }
  914. }
  915. class PlayFrame_HelpjMenuItem_actionAdapter implements ActionListener {
  916.     private PlayFrame adaptee;
  917.     PlayFrame_HelpjMenuItem_actionAdapter(PlayFrame adaptee) {
  918.         this.adaptee = adaptee;
  919.     }
  920.     public void actionPerformed(ActionEvent e) {
  921.         adaptee.HelpjMenuItem_actionPerformed(e);
  922.     }
  923. }
  924. class PlayFrame_DeletejMenuItem_actionAdapter implements ActionListener {
  925.     private PlayFrame adaptee;
  926.     PlayFrame_DeletejMenuItem_actionAdapter(PlayFrame adaptee) {
  927.         this.adaptee = adaptee;
  928.     }
  929.     public void actionPerformed(ActionEvent e) {
  930.         adaptee.DeletejMenuItem_actionPerformed(e);
  931.     }
  932. }
  933. class PlayFrame_AddjMenuItem_actionAdapter implements ActionListener {
  934.     private PlayFrame adaptee;
  935.     PlayFrame_AddjMenuItem_actionAdapter(PlayFrame adaptee) {
  936.         this.adaptee = adaptee;
  937.     }
  938.     public void actionPerformed(ActionEvent e) {
  939.         adaptee.AddjMenuItem_actionPerformed(e);
  940.     }
  941. }
  942. class PlayFrame_PlayjMenuItem_actionAdapter implements ActionListener {
  943.     private PlayFrame adaptee;
  944.     PlayFrame_PlayjMenuItem_actionAdapter(PlayFrame adaptee) {
  945.         this.adaptee = adaptee;
  946.     }
  947.     public void actionPerformed(ActionEvent e) {
  948.         adaptee.PlayjMenuItem_actionPerformed(e);
  949.     }
  950. }
  951. class PlayFrame_repeatjToggleButton_actionAdapter implements ActionListener {
  952.     private PlayFrame adaptee;
  953.     PlayFrame_repeatjToggleButton_actionAdapter(PlayFrame adaptee) {
  954.         this.adaptee = adaptee;
  955.     }
  956.     public void actionPerformed(ActionEvent e) {
  957.         adaptee.repeatjToggleButton_actionPerformed(e);
  958.     }
  959. }
  960. class PlayFrame_ExitjMenuItem_actionAdapter implements ActionListener {
  961.     private PlayFrame adaptee;
  962.     PlayFrame_ExitjMenuItem_actionAdapter(PlayFrame adaptee) {
  963.         this.adaptee = adaptee;
  964.     }
  965.     public void actionPerformed(ActionEvent e) {
  966.         adaptee.ExitjMenuItem_actionPerformed(e);
  967.     }
  968. }
  969. class PlayFrame_PreviousjButton_actionAdapter implements ActionListener {
  970.     private PlayFrame adaptee;
  971.     PlayFrame_PreviousjButton_actionAdapter(PlayFrame adaptee) {
  972.         this.adaptee = adaptee;
  973.     }
  974.     public void actionPerformed(ActionEvent e) {
  975.         adaptee.PreviousjButton_actionPerformed(e);
  976.     }
  977. }
  978. class PlayFrame_StopjButton_actionAdapter implements ActionListener {
  979.     private PlayFrame adaptee;
  980.     PlayFrame_StopjButton_actionAdapter(PlayFrame adaptee) {
  981.         this.adaptee = adaptee;
  982.     }
  983.     public void actionPerformed(ActionEvent e) {
  984.         adaptee.StopjButton_actionPerformed(e);
  985.     }
  986. }
  987. class PlayFrame_PlayjButton_actionAdapter implements ActionListener {
  988.     private PlayFrame adaptee;
  989.     PlayFrame_PlayjButton_actionAdapter(PlayFrame adaptee) {
  990.         this.adaptee = adaptee;
  991.     }
  992.     public void actionPerformed(ActionEvent e) {
  993.         adaptee.PlayjButton_actionPerformed(e);
  994.     }
  995. }
  996. class PlayFrame_PausejButton_actionAdapter implements ActionListener {
  997.     private PlayFrame adaptee;
  998.     PlayFrame_PausejButton_actionAdapter(PlayFrame adaptee) {
  999.         this.adaptee = adaptee;
  1000.     }
  1001.     public void actionPerformed(ActionEvent e) {
  1002.         adaptee.PausejButton_actionPerformed(e);
  1003.     }
  1004. }
  1005. class PlayFrame_AboutjMenuItem_actionAdapter implements ActionListener {
  1006.     private PlayFrame adaptee;
  1007.     PlayFrame_AboutjMenuItem_actionAdapter(PlayFrame adaptee) {
  1008.         this.adaptee = adaptee;
  1009.     }
  1010.     public void actionPerformed(ActionEvent e) {
  1011.         adaptee.AboutjMenuItem_actionPerformed(e);
  1012.     }
  1013. }
  1014. class PlayFrame_NextjButton_actionAdapter implements ActionListener {
  1015.     private PlayFrame adaptee;
  1016.     PlayFrame_NextjButton_actionAdapter(PlayFrame adaptee) {
  1017.         this.adaptee = adaptee;
  1018.     }
  1019.     public void actionPerformed(ActionEvent e) {
  1020.         adaptee.NextjButton_actionPerformed(e);
  1021.     }
  1022. }
  1023. class PlayFrame_ListjToggleButton_actionAdapter implements ActionListener {
  1024.     private PlayFrame adaptee;
  1025.     PlayFrame_ListjToggleButton_actionAdapter(PlayFrame adaptee) {
  1026.         this.adaptee = adaptee;
  1027.     }
  1028.     public void actionPerformed(ActionEvent e) {
  1029.         adaptee.ListjToggleButton_actionPerformed(e);
  1030.     }
  1031. }
  1032. class PlayFrame_OpenjButton_actionAdapter implements ActionListener {
  1033.     private PlayFrame adaptee;
  1034.     PlayFrame_OpenjButton_actionAdapter(PlayFrame adaptee) {
  1035.         this.adaptee = adaptee;
  1036.     }
  1037.     public void actionPerformed(ActionEvent e) {
  1038.         adaptee.OpenjButton_actionPerformed(e);
  1039.     }
  1040. }