2014-03-12 61 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的控制。我希望這有幫助。 –