如何使JavaFX MediaView拉伸媒体填充父容器?

时间:2014-08-02 00:08:13

标签: java javafx media

我试图让我的视频尺寸自动拉伸并填充MediaView并保持视频的原始宽高比。基本上,我希望我的MediaPlayer适合调整大小等父容器,就像所有视频播放器一样。

如果有人能够阐明如何实现这一点,那将非常感谢,谢谢。

4 个答案:

答案 0 :(得分:7)

这是拉伸到包含场景的示例,场景由尺寸"尺寸"设置:

final MediaPlayer videoPlayer = new MediaPlayer(
    new Media(new File(videoPath).toURI().toString()));
MediaView mv = new MediaView(videoPlayer);
DoubleProperty mvw = mv.fitWidthProperty();
DoubleProperty mvh = mv.fitHeightProperty();
mvw.bind(Bindings.selectDouble(mv.sceneProperty(), "width"));
mvh.bind(Bindings.selectDouble(mv.sceneProperty(), "height"));
mv.setPreserveRatio(true);

setScene(new Scene(new Group(mv), size.getWidth(), size.getHeight()));

答案 1 :(得分:6)

" .fxml"更具声明性的方式文件将是:

...
<Pane fx:id="mediaViewPane">
  <children>
     <MediaView fx:id="videoView" fitHeight="${mediaViewPane.height}" fitWidth="${mediaViewPane.width}" layoutX="1.0" />
  </children>
</Pane>
...

您可以使用&#34; $ {...}&#34; &#34; .fxml&#34;中任何属性的语法用于表达式绑定。 如果要调用UI元素,则必须提供&#34; fx:id&#34;。例如,在这种情况下,它是fx:id =&#34; mediaViewPane&#34;。

因此,您不必关心代码中的UI内容。 对我而言,它有点清洁。

答案 2 :(得分:1)

刚认识到没有人回答这个,所以我会回答。

只需将媒体播放器fitWidthProperty设置为MediaView的那个:

player.fitWidthProperty().bind(mediaView.widthProperty());

和高度相同(如果你想),还有preserveRatio和stuff。

答案 3 :(得分:0)

我对此也很挣扎,但是我做到了

mediaView.fitWidthProperty().bind(stage.widthProperty());
mediaView.fitHeightproperty().bind(stage.heightProperty());

,我为我工作。 mediaView以与舞台/窗口相同的大小播放。希望对您有所帮助。