2014-03-12 64 views
1

我想把一个调整大小的媒体播放器摆在选项卡式窗格中。我可以找到调整媒体大小的唯一方法就是使用媒体视图。但是当我尝试添加控制器时,MediaControl无法转换为javafx.scene.Group。Swing和javafx

我的代码是;

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 
import javax.swing.SwingUtilities; 
import javafx.application.Platform; 
import javafx.embed.swing.JFXPanel; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.media.Media; 
import javafx.scene.media.MediaPlayer; 
import javafx.scene.media.MediaView; 

public class JavaFX_insideTab { 

private static final String MEDIA_URL = "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv"; 

private static void initFxLater(JFXPanel panel) { 
    Group root = new Group(); 
    Scene scene = new Scene(root, 450, 200); 
    // create media player 
    Media media = new Media(MEDIA_URL); 
    MediaPlayer mediaPlayer = new MediaPlayer(media); 
    mediaPlayer.setAutoPlay(true); 

    MediaView mediaView = new MediaView(mediaPlayer); 

    mediaView.setFitWidth(450); 
    mediaView.setFitHeight(200); 

    MediaControl mediaControl = new MediaControl(mediaPlayer); 
    scene.setRoot(mediaControl); 

    ((Group) scene.getRoot()).getChildren().add(mediaView); 

     panel.setScene(scene); 
} 

private static void initSwingLater() { 
    JFrame jFrame = new JFrame("- JFrame -"); 
    jFrame.setSize(540, 426); 
    jFrame.setVisible(true); 
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jFrame.getContentPane().setLayout(null); 

    final JFXPanel jFXPanel = new JFXPanel(); 
    jFXPanel.setBounds(0, 0, 540, 188); 

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); 
    tabbedPane.setBounds(0, 0, 528, 392); 
    jFrame.getContentPane().add(tabbedPane); 

    JPanel panel = new JPanel(); 
    tabbedPane.addTab("New tab", null, panel, null); 
    JPanel playerpanel = new JPanel(); 
    tabbedPane.addTab("Media Player", null, playerpanel, null); 

    JPanel panel_1 = new JPanel(); 
    playerpanel.add(jFXPanel); 

    Platform.runLater(new Runnable() { 

    @Override 
    public void run() { 
    initFxLater(jFXPanel); 
    } 
    }); 

} 

public static void main(String[] args) { 
SwingUtilities.invokeLater(new Runnable() { 

@Override 
    public void run() { 
     initSwingLater(); 
    } 

    }); 
} 

}

我要去哪里错了?

回答

0

假设this is your MediaControl,那么它已经是Parent子类,所以你不需要把它放在父亲Group。通过“调整媒体”

private static void initFxLater(JFXPanel panel) { 
    MediaPlayer mediaPlayer = new MediaPlayer(new Media(MEDIA_URL)); 
    mediaPlayer.setAutoPlay(true); 

    MediaView mediaView = new MediaView(mediaPlayer); 
    mediaView.setFitWidth(450); 
    mediaView.setFitHeight(200); 

    panel.setScene(new Scene(new MediaControl(mediaPlayer)); 
} 

我不太清楚你的意思,但上面的代码将永远大小媒体以适合的边框内:

您可以使用下面的代码大小450x200(默认保留媒体的大小比例)。

+0

感谢您的回答,让我更接近我的目标。然而,这似乎产生了一个10mm高的球员与未缩放的电影。我想要做的是在选项卡窗格上创建一个具有媒体控件的小型(400 x 200 ish)缩放电影。通过缩放电影,我的意思是所有的电影都适合400 x 200的控制。我希望这有帮助。 –