1
我有擴展JFrame的視頻播放器類,因爲我需要在舞臺(使用SwingNode的Jafafx)中運行此幀,所以我需要將此類傳遞給JPanel。 這可能嗎? 我試圖改變,但在EventHangler類中創建問題,而「visualComponent」不在面板中顯示,只有controlsComponent。Java - 將JFrame傳輸到JPanel
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.media.*;
public class MediaPlayerDemo extends JFrame {
private Player player;
private File file;
public MediaPlayerDemo()
{
super("Demonstrating the Java Media Player");
JButton openFile = new JButton("Open file to play");
openFile.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e)
{
openFile();
createPlayer();
}
}
);
getContentPane().add(openFile, BorderLayout.NORTH);
setSize(300, 300);
show();
}
private void openFile()
{
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(
JFileChooser.FILES_ONLY);
int result = fileChooser.showOpenDialog(this);
// user clicked Cancel button on dialog
if (result == JFileChooser.CANCEL_OPTION)
file = null;
else
file = fileChooser.getSelectedFile();
}
private void createPlayer()
{
if (file == null)
return;
removePreviousPlayer();
try {
// create a new player and add listener
player = Manager.createPlayer(file.toURL());
player.addControllerListener(new EventHandler());
player.start(); // start player
}
catch (Exception e){
JOptionPane.showMessageDialog(this,
"Invalid file or location", "Error loading file",
JOptionPane.ERROR_MESSAGE);
}
}
private void removePreviousPlayer()
{
if (player == null)
return;
player.close();
Component visual = player.getVisualComponent();
Component control = player.getControlPanelComponent();
Container c = getContentPane();
if (visual != null)
c.remove(visual);
if (control != null)
c.remove(control);
}
public static void main(String args[])
{
MediaPlayerDemo app = new MediaPlayerDemo();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
// inner class to handler events from media player
private class EventHandler implements ControllerListener {
public void controllerUpdate(ControllerEvent e) {
if (e instanceof RealizeCompleteEvent) {
Container c = getContentPane();
// load Visual and Control components if they exist
Component visualComponent =
player.getVisualComponent();
if (visualComponent != null)
c.add(visualComponent, BorderLayout.CENTER);
Component controlsComponent =
player.getControlPanelComponent();
if (controlsComponent != null)
c.add(controlsComponent, BorderLayout.SOUTH);
c.doLayout();
}
}
}
}
這還不夠,仍然有錯誤... – Ramz
有什麼錯誤? (我不熟悉你正在使用的庫) – ArgonBird18
你也應該用'super(new BorderLayout())'替換'super(「演示Java媒體播放器」);'' –