![](/img/trans.png)
[英]How do I make JavaFX MediaView stretch and shrink media to fill/fit parent container?
[英]How do I make JavaFX MediaView stretch media to fill parent?
我想使JavaFX MediaView拉伸以填充父容器。
我之前嘗試過Google的一些方法,但沒有幫助(也許我沒有正確應用),並且有一個與此名稱相同的問題,但是該問題中的解決方案可能不適合我。
首先,我使用ahchorpane錨定mediaview,但發現它無法拉伸mediaview,而且我不知道為什么,因為其他控件(如按鈕)可以工作。
然后我嘗試將其寬度和高度綁定到anchorpane(mediaview的父對象)
Region region=(Region) mediaplayer.getParent();
mediaplayer.setPreserveRatio(false);
mediaplayer.fitWidthProperty().bind(region.widthProperty());
mediaplayer.fitHeightProperty().bind(region.heightProperty());
調整窗口大小時,它可以完全擴展mediaview,但不能縮小! 我猜可能是因為區域的大小取決於孩子嗎?
最后,我嘗試將mediaview的大小綁定到stage的大小,這是可行的,但是代碼看起來很難看,因為我需要手動計算大小。
mediaplayer.setPreserveRatio(false);
mediaplayer.fitWidthProperty().bind(stage.widthProperty().subtract(200));
mediaplayer.fitHeightProperty().bind(stage.heightProperty().subtract(135));
有沒有更好的解決方案?
使用下面的代碼,您會看到您可以隨意縮放MediaView(取決於舞台尺寸)
import java.io.File;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class TestApp extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
BorderPane pane = new BorderPane();
FileChooser fc = new FileChooser();
File mediaFile = fc.showOpenDialog(null);
MediaView moviePlayer;
if (mediaFile != null) {
MediaPlayer player = new MediaPlayer(new Media(mediaFile.toURI().toString()));
moviePlayer = new MediaView(player);
moviePlayer.setPreserveRatio(false);
moviePlayer.fitWidthProperty().bind(pane.widthProperty());
moviePlayer.fitHeightProperty().bind(pane.heightProperty());
pane.getChildren().add(moviePlayer);
player.play();
}
Scene scene = new Scene(pane, 300, 300);
stage.setScene(scene);
stage.show();
}
}
該代碼也可與AnchorPane一起使用,因此,如果您仍然遇到問題或我不了解您的需求,我想您的代碼還有其他問題。 制作一個簡單的可運行程序來演示該問題。
嘗試添加此Action-Listener以重新調整大小:
MediaView.getParent().layoutBoundsProperty().addListener(new ChangeListener<Bounds>() {
@Override
public void changed(ObservableValue<? extends Bounds> observable, Bounds oldValue, Bounds newValue) {
mediaView.setFitHeight(newValue.getHeight());
mediaView.setFitWidth(newValue.getWidth());
}
});
每次更改父級大小或最大化父級大小時都應調用此方法,然后也應將視圖大小調整為父級。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.