How do I make JavaFX MediaView stretch media to fill parent container?

喜欢而已 提交于 2019-11-29 06:46:11

Here's an example of stretching to the containing Scene and the scene is set by the Dimension "size":

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()));

A more declarative way in a ".fxml" file would be:

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

You can use the "${...}" syntax for any attribute in your ".fxml" for Expression Binding. If you want to call a UI element you have to provide a "fx:id". For example in this case it's fx:id="mediaViewPane".

So you don't have to care about the UI stuff in your code. For me it's a little bit cleaner.

Just realized no-one answered this so I'll answer it.

Just set the media player fitWidthProperty to that of the MediaView so:

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

and the same for the height (if you wanted) and also preserveRatio and stuff.

Syrus

I also struggled with this but I did this

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

and I worked for me. The mediaView played at the same size as the stage / window. Hope it helps.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!