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
}
Created by: Brandan Jones December 17, 2001