Java Applet: Basic Drum Set

前端 未结 1 1433
滥情空心
滥情空心 2021-01-25 09:21

I am trying to program an applet that has four buttons, all of which play a short audio file. The goal is to try and have the user successfully click the buttons any number of t

相关标签:
1条回答
  • 2021-01-25 10:18

    When you say "applet or GUI" I think you really mean applet or application--they are both GUIs. I'm not really familiar with AudioClip, but if it works as easy as it seems, then all you need to do is change your JApplet to a JPanel, then create a main method which creates a JFrame and set its content pane to your JPanel:

    disclaimer: This code has not been tested and probably contains complilation errors (I will correct anything pointed out).

    import java.awt.*;
    import java.applet.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    
    public class drumKit extends JPanel implements ActionListener
    {
    
        private final JButton snareButton;
        private final JButton hiHatButton;
        private final JButton bassButton;
        private final JButton cymbalsButton;
        private final AudioClip snare;
        private final AudioClip hiHat;
        private final AudioClip bass;
        private final AudioClip cymbals;
    
        public drumKit()
        {
            super();
    
            // create buttons
            snareButton = new JButton("Snare");
            hiHatButton = new JButton("Hi Hat");
            bassButton = new JButton("Kick");
            cymbalsButton = new JButton("Cymbals");
    
            // setup audio clips
            snare = getAudioClip(getDocumentBase(), "Snare.wav");
            hiHat = getAudioClip(getDocumentBase(), "HiHat.wav");
            bass = getAudioClip(getDocumentBase(), "Kick.wav");
            cymbals = getAudioClip(getDocumentBase(), "Crash.wav");
    
            // set layout
            setLayout (new FlowLayout());
    
            // add this action listener to the buttons and add to this panel
            sampleButtons();
        }
    
        private void sampleButtons()
        {
            // add this as the each button's action listener
            snareButton.addActionListener(this);
            hiHatButton.addActionListener(this);
            bassButton.addActionListener(this);
            cymbalsButton.addActionListener(this);
    
            // add each button to this panel
            this.add(snareButton);
            this.add(hiHatButton);
            this.add(bassButton);
            this.add(cymbalsButton);
        }
    
        public void actionPerformed(ActionEvent e)
        {
            if (e.getSource() == snareButton)
                snare.play();
            else if (e.getSource() == hiHatButton)
                hiHat.play();
            else if (e.getSource() == bassButton)
                bass.play();
            else if (e.getSource() == cymbalsButton)
                cymbals.play();
        }
    
        /**
         * main method creates a frame which contains this custom panel
         * and displays it.
         */
        public static void main(String ...args){
            // set the look and feel to the system's look and feel
            try{
                UIManager.setLookAndFeel(
                    UIManager.getSystemLookAndFeelClassName());
            }catch(Exception e){
                // if this fails, who cares, the look and feel will be Java's
                // just continue
            }
    
            // create frame and make sure that when you close the frame the 
            //    program exits!
            final JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // create your panel, set it to the frame's content pane, 
            //    then show the frame
            final JPanel panel = new drumKit();
            frame.setContentPane(panel);
            frame.setVisible(true);
    
            // resize the frame to be the preferred size of your panel
            frame.pack();
    }
    

    If you cannot read the files, then I would suggest putting in the fully qualified path name rather than just "Snare.wav" (for example) which looks in the current CLASSPATH directory (which for eclipse, I believe is the project directory).

    0 讨论(0)
提交回复
热议问题