2014-03-12 6 views
1

스윙 탭 패널에 크기가 조정 된 미디어 플레이어를 넣으려고합니다. 미디어 크기를 조정할 수있는 유일한 방법은 미디어보기를 사용하는 것입니다. 그러나 컨트롤러를 추가하려고하면 javafx.scene.Group에 MediaControl을 캐스팅 할 수 없습니다.스윙 및 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) 크기의 동영상을 만드는 것입니다. 스케일 된 영화는 모든 영화가 400x200 컨트롤에 들어 맞는다는 것을 의미합니다. 이게 도움이 되길 바란다. –