I am very new to Java and brand new to stack overflow.
I am attempting to create a simple media player coded in Java utilizing the JMF API. Thus far I have been able to set up a simple queue/playlist to hold song files using a JComboBox
called playListHolder
. When the user selects open from the menu bar, they select a song they want to add from a JFileChooser
. The song file is then added to playListHolder
using the addItem()
method. When an item is selected in playListHolder
and the user clicks the play
button, a File object file is assigned the item to be played using playListHolder.getSelectedItem()
. Section of code and relevant variables below:
File file;
Player p;
Component cont;
Container c;
Component visual;
JButton play = new JButton("Play");
play.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
file = (File) playListHolder.getSelectedItem();
startplay();
}
});
public void openFile() {
JFileChooser filech = new JFileChooser();
int result = filech.showOpenDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
file = null;
} else {
file = filech.getSelectedFile();
playListHolder.addItem(file);
;
}
}
public void startplay() {
if (file == null)
return;
removepreviousplayer();
try {
p = Manager.createPlayer(file.toURI().toURL());
p.addControllerListener(new ControllerListener() {
public void controllerUpdate(ControllerEvent ce) {
if (ce instanceof RealizeCompleteEvent) {
c = getContentPane();
cont = p.getControlPanelComponent();
visual = p.getVisualComponent();
if (visual != null)
c.add(visual, BorderLayout.CENTER);
if (cont != null)
c.add(cont, BorderLayout.SOUTH);
c.doLayout();
}
}
});
p.start();
}
catch (Exception e) {
JOptionPane.showMessageDialog(this, "Invalid file or location",
"Error loading file", JOptionPane.ERROR_MESSAGE);
}
}
What I would like to do, is have the song files appear in the JComboBox
with just the filename, not the entire path that the file.toString()
sets up in the JComboBox
.
Thus far, I tried just adding the file.getName()
to the box, but quickly realized my noobishness. Doing this only adds a String
of the file name to the box, such that when you use the play
button in the media player to actually playback the file, it fails to find the file and throws an exception.
I also tried creating a FileWrapper
class that had a toString()
method which utilized the file.getName()
method to return just the file name, and then added that FileWrapper
to the box instead of the file object directly. I got the same result.
I am certain that it is just my amateur level of knowledge that is creating this stumbling block, there has to be a simple way to do this, but believe it or not I could not seem to find one, at lest not one written in a way I easily understood. Any help is much appreciated.