如何将任何组件的维度绑定到JavaJX中的父容器?

如何将任何组件的维度绑定到JavaJX中的父容器?,java,javafx,javafx-8,javafx-2,Java,Javafx,Javafx 8,Javafx 2,我正在创建一个应用程序,需要在其中播放视频,如下所示 红色边界表示一种锚烷。AnchorPane中有MediaView 我只想让MediaView(或视频)随着我移动分割窗格的分隔符而增长和收缩。我编写的代码使视频增长,但当我向后移动拆分窗格的分隔符时,视频不会收缩。而是从侧面裁剪视频帧 如何将mediaView的维度绑定到其父组件?或者我的代码有什么问题 下面是我的代码 公共作废开始(阶段primaryStage){ 拆分窗格视频\文本\拆分窗格=新建拆分窗格(); 标签标签2=新标签(“a

我正在创建一个应用程序,需要在其中播放视频,如下所示

红色边界表示一种锚烷。AnchorPane中有MediaView

我只想让MediaView(或视频)随着我移动分割窗格的分隔符而增长和收缩。我编写的代码使视频增长,但当我向后移动拆分窗格的分隔符时,视频不会收缩。而是从侧面裁剪视频帧

如何将mediaView的维度绑定到其父组件?或者我的代码有什么问题

下面是我的代码

公共作废开始(阶段primaryStage){
拆分窗格视频\文本\拆分窗格=新建拆分窗格();
标签标签2=新标签(“abdsanjasj”);
AnchorPane视频_AnchorPane=新的AnchorPane();
视频_主播。设置顺序(新边框)(新边框笔划)(颜色为红色,
BorderStrokeStyle.SOLID,CornerRadii.EMPTY,BorderWidths.DEFAULT));
AnchorPane anchorPane2=新的AnchorPane();
锚烷.立根锚(label2,0.0);
AnchorPane.setTopAnchor(label2,0.0);
AnchorPane.setLeftAnchor(label2,0.0);
AnchorPane.setRightAnchor(label2,0.0);
anchorPane2.getChildren().add(label2);
//----播放视频的代码---
MediaView MediaView=新MediaView();
媒体=新媒体(“文件:/E:/video.mp4”);
MediaPlayer=新的MediaPlayer(媒体);
mediaView.setMediaPlayer(mediaPlayer);
mediaPlayer.setAutoPlay(true);
//mediaView.autosize();
//DoubleProperty width=mediaView.fitWidthProperty();
//DoubleProperty高度=mediaView.fitHeightProperty();
//width.bind(Bindings.selectDouble(mediaView.sceneProperty(),“width”);
//height.bind(Bindings.selectDouble(mediaView.sceneProperty(),“height”);
video_AnchorPane.getChildren().add(mediaView);
video\u text\u SplitPane.getItems().add(video\u AnchorPane);
锚烷.立根锚烷(视频锚烷,0.0);
AnchorPane.setTopAnchor(视频_AnchorPane,0.0);
AnchorPane.setLeftAnchor(视频_AnchorPane,0.0);
AnchorPane.setRightAnchor(视频_AnchorPane,0.0);
mediaView.setPreserveRatio(true);
视频\文本\拆分窗格.getItems().add(anchorPane2);
//----将媒体视图维度绑定到其父容器的代码---
mediaView.fitWidthProperty().bind(video_AnchorPane.widthProperty());
mediaView.fitHeightProperty().bind(video_AnchorPane.heightProperty());
BorderPane video_textArea=新建BorderPane();
视频\文本区域。机顶盒(rangeSliderAnchorPane);
视频文本区域.设置按钮(视频控制按钮);
视频文本区域。设置中心(视频文本分割窗格)=
SplitPane SplitPane=新的SplitPane();
splitPane.setOrientation(方向.水平);
splitPane.getItems().add(树);
splitPane.getItems().add(视频文本区域);
BorderPane布局=新建BorderPane();
布局。机顶盒(菜单栏);
布局。设置中心(拆分窗格);
layout.setBottom(新状态栏());
场景=新场景(布局,1920990);
primaryStage.setTitle(“字幕生成器”);
初级阶段。场景(场景);
primaryStage.show();
}

这就是你想要实现的目标吗


这就是你想要达到的目标吗


要使您的代码可供他人使用,请使用公开可用的资源(mp4可在web上获得),而不是本地资源(
文件:/E:/video.mp4
)。请参阅。将您的MediaView设置为边框窗格的中心,而不是使用固定按钮。不要试图束缚它的宽度和高度;这是类似于BorderPane的布局的工作。要使您的代码可供其他人使用,请使用公开可用的资源(mp4在web上可用),而不是本地资源(
文件:/E:/video.mp4
)。请参阅。将您的MediaView设置为边框窗格的中心,而不是使用固定按钮。不要试图束缚它的宽度和高度;这是类似BorderPane的布局的工作。如何使媒体视图始终显示在边框窗格的中心??BorderPane.setAlignment(mediaView,Pos.center);不工作:(请参阅。对于其他问题(如何使媒体视图始终出现在边框的中心))请新建一个职位。在发布问题或答案时,总是考虑在回答中表现出来的。如何使媒体视图始终出现在边界窗格的中心?边框对齐(MediaVIEW,POSS.Center)不工作:(请参阅)。对于其他问题(“如何使媒体视图总是出现在边框的中心”)请制作一个新的帖子。在回答问题或回答时,总是考虑到答案。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;
import javafx.util.Duration;

public class Player extends Application {

    @Override
    public void start(Stage primaryStage) {

        Label label2 = new Label("Lorem ipsum dolor sit amet, consectetur adipiscing elit\n, "
                               + "sed do eiusmod tempor incididunt ut labore et dolore magna\n"
                               + "aliqua. Ut enim ad minim veniam, quis nostrud exercitation \n"
                               + "ullamco laboris nisi ut aliquip ex ea commodo consequat");
        StackPane textPane = new StackPane();
        textPane.getChildren().add(label2);

        MediaView mediaView = new MediaView();
        Media media = new Media("http://techslides.com/demos/sample-videos/small.mp4");
        MediaPlayer mediaPlayer = new MediaPlayer(media);
        mediaView.setMediaPlayer(mediaPlayer);
        mediaPlayer.setAutoPlay(true);
        mediaPlayer.setOnEndOfMedia (() -> {
            mediaPlayer.seek(Duration.ZERO);
            mediaPlayer.play();
        });
        mediaView.setPreserveRatio(true);
        mediaView.autosize();

        BorderPane videoPane = new BorderPane();
        videoPane.getChildren().add(mediaView);

        SplitPane videoTextSplitPane = new SplitPane();
        videoTextSplitPane.getItems().add(videoPane);
        videoTextSplitPane.getItems().add(textPane);

        mediaView.fitWidthProperty().bind(videoPane.widthProperty());
        Scene scene = new Scene(videoTextSplitPane, 800, 400);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}