Class 2 Intermediate Java 30-IT-397  

New Jukebox

/*
 * Jukebox.java
 *
 * Created on February 23, 2002, 3:14 PM
 */

package PA2;

import java.util.*;
import javax.swing.*;

/**
 *
 * @author  default
 */
public class Jukebox extends javax.swing.JFrame {

    Song song;
    ArrayList songs = new ArrayList();
 
    /** Creates new form Jukebox */
    public Jukebox() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {
        grpTypes = new javax.swing.ButtonGroup();
        centerPanel = new javax.swing.JPanel();
        innerCenterPanel = new javax.swing.JPanel();
        pnlSongInfo = new javax.swing.JPanel();
        lblSongTitle = new javax.swing.JLabel();
        txtTitle = new javax.swing.JTextField();
        lblArtist = new javax.swing.JLabel();
        txtArtist = new javax.swing.JTextField();
        lblAlbum = new javax.swing.JLabel();
        txtAlbum = new javax.swing.JTextField();
        lblType = new javax.swing.JLabel();
        pnlSongTypes = new javax.swing.JPanel();
        rdoDisco = new javax.swing.JRadioButton();
        rdoPop = new javax.swing.JRadioButton();
        rdoClassic = new javax.swing.JRadioButton();
        pnlList = new javax.swing.JPanel();
        pnlAdd = new javax.swing.JPanel();
        Add = new javax.swing.JButton();
        txtSongList = new javax.swing.JTextArea();
        northPanel = new javax.swing.JPanel();
        lblTitle = new javax.swing.JLabel();
        southPanel = new javax.swing.JPanel();
        btnRandom = new javax.swing.JButton();
        lblCurrent = new javax.swing.JLabel();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        centerPanel.setLayout(new java.awt.GridLayout(1, 1));

        innerCenterPanel.setLayout(new java.awt.GridLayout(2, 1));

        pnlSongInfo.setLayout(new java.awt.GridLayout(1, 2, 4, 4));

        lblSongTitle.setText("Song Title");
        pnlSongInfo.add(lblSongTitle);

        txtTitle.setColumns(15);
        pnlSongInfo.add(txtTitle);

        lblArtist.setText("Artist");
        pnlSongInfo.add(lblArtist);

        pnlSongInfo.add(txtArtist);

        lblAlbum.setText("Album");
        pnlSongInfo.add(lblAlbum);

        pnlSongInfo.add(txtAlbum);

        lblType.setText("Type");
        pnlSongInfo.add(lblType);

        // Create the 'universal' action listener.
        // The Event object evt will be passed by the JRadioButton that is clicked.
        java.awt.event.ActionListener rdoListener = new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rdoActionPerformed(evt);
            }
        };

 
        rdoDisco.setText("Disco");
        grpTypes.add(rdoDisco);
        // Add the universal listener.
        rdoDisco.addActionListener(rdoListener);

        pnlSongTypes.add(rdoDisco);

 
        rdoPop.setText("Pop");
        grpTypes.add(rdoPop);
        // Add the universal listener.
        rdoPop.addActionListener(rdoListener);

        pnlSongTypes.add(rdoPop);

        rdoClassic.setText("Classic");
        grpTypes.add(rdoClassic);
        // Add the universal listener.
        rdoClassic.addActionListener(rdoListener);

        pnlSongTypes.add(rdoClassic);

        pnlSongInfo.add(pnlSongTypes);

        innerCenterPanel.add(pnlSongInfo);

        pnlList.setLayout(new java.awt.BorderLayout());

        Add.setText("Add");
        Add.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addActionPerformed(evt);
            }
        });

        pnlAdd.add(Add);

        pnlList.add(pnlAdd, java.awt.BorderLayout.NORTH);

        txtSongList.setColumns(30);
        txtSongList.setRows(5);
        pnlList.add(txtSongList, java.awt.BorderLayout.CENTER);

        innerCenterPanel.add(pnlList);

        centerPanel.add(innerCenterPanel);

        getContentPane().add(centerPanel, java.awt.BorderLayout.CENTER);

        lblTitle.setText("My Jukebox Thingie");
        northPanel.add(lblTitle);

        getContentPane().add(northPanel, java.awt.BorderLayout.NORTH);

        southPanel.setLayout(new java.awt.BorderLayout());

        btnRandom.setLabel("Select Random");
        btnRandom.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRandomActionPerformed(evt);
            }
        });

        southPanel.add(btnRandom, java.awt.BorderLayout.WEST);

        lblCurrent.setText("Current Song: None");
        southPanel.add(lblCurrent, java.awt.BorderLayout.CENTER);

        getContentPane().add(southPanel, java.awt.BorderLayout.SOUTH);

        pack();
    }

    /**
     * Called from the universal listener when a user clicks on a JRadioButton.
     * We get an instance of that JRadioButton from the Event passed.
     * Then we can get the label, once we cast that object to a JRadioButton object.
     * The label contains the text of the JRadioButton.  We can pass this to our
     * factory method to get an instance of the class.
     *
     * @param evt The event passed in from the listener, when the JRadioButton is clicked.
     */
 
    private void rdoActionPerformed(java.awt.event.ActionEvent evt) {
        // Add your handling code here:
        JRadioButton rdoButton = (JRadioButton) evt.getSource();
        String songType = rdoButton.getLabel();
        song = songFactory(songType);
    }
 

    private void btnRandomActionPerformed(java.awt.event.ActionEvent evt) {
        // Add your handling code here:
        int songNumber = (int) (Math.random() * songs.size());
        Song selectedSong = (Song) songs.get(songNumber);
        lblCurrent.setText(selectedSong.toString());
    }

    private void addActionPerformed(java.awt.event.ActionEvent evt) {
        // Add your handling code here:
        String artist = txtArtist.getText();
        String title = txtTitle.getText();
        String album = txtAlbum.getText();
        song.setInfo(artist, title, album);
        songs.add(song);
        txtSongList.setText(txtSongList.getText() + song.toString() + "\n");
        song = song.getNew();
        txtArtist.setText("");
        txtTitle.setText("");
        txtAlbum.setText("");
    }

    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        new Jukebox().show();
    }

    /**
     * This method creates a new Song subclass object based on the text passed to it.
     *
     * @param songType the type of song, as a String object.  Can be any subclass of class Song.
     */
 
    private Song songFactory(String songType) {
        Song s = null;
        try {
            s = (Song) Class.forName("PA2." + songType).newInstance();
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found.  Message: " + e.getMessage());
            e.printStackTrace();
        } catch (InstantiationException e) {
            System.out.println("Unable to instantiate class.  Message: " + e.getMessage());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("General exception encountered while trying to instantiate Song.  Message: " + e.getMessage());
            e.printStackTrace();
        }
        return s;
    }
 

    // Variables declaration - do not modify
    private javax.swing.JRadioButton rdoDisco;
    private javax.swing.JPanel pnlList;
    private javax.swing.JTextField txtAlbum;
    private javax.swing.JLabel lblArtist;
    private javax.swing.JButton btnRandom;
    private javax.swing.JLabel lblAlbum;
    private javax.swing.JPanel centerPanel;
    private javax.swing.JTextArea txtSongList;
    private javax.swing.JTextField txtArtist;
    private javax.swing.JPanel innerCenterPanel;
    private javax.swing.JTextField txtTitle;
    private javax.swing.JPanel northPanel;
    private javax.swing.JLabel lblTitle;
    private javax.swing.JPanel pnlSongInfo;
    private javax.swing.JRadioButton rdoClassic;
    private javax.swing.ButtonGroup grpTypes;
    private javax.swing.JPanel pnlAdd;
    private javax.swing.JButton Add;
    private javax.swing.JLabel lblCurrent;
    private javax.swing.JPanel southPanel;
    private javax.swing.JPanel pnlSongTypes;
    private javax.swing.JLabel lblSongTitle;
    private javax.swing.JLabel lblType;
    private javax.swing.JRadioButton rdoPop;
    // End of variables declaration

}
 
 

 Back

Created by:  Brandan Jones December 17, 2001