我想使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一起使用,因此,如果您仍然遇到问题或我不了解您的需求,我想您的代码还有其他问题。制作一个简单的可运行程序来演示该问题。
关于java - 如何使JavaFX MediaView拉伸(stretch)媒体填充父级?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46667686/