Как привязать измерения любого компонента к родительскому контейнеру в JavaJX? - PullRequest
0 голосов
/ 05 февраля 2020

Я создаю приложение, в котором мне нужно воспроизвести видео, как показано ниже.

Screenshot of my App

Красная граница представляет AnchorPane. В AnchorPane есть MediaView.

Все, что я хочу, это заставить MediaView (или видео) расти и уменьшаться при перемещении разделителя разделенной панели. Код, который я написал, заставляет видео расти, но когда я перемещаю разделитель разделенной панели назад, видео не уменьшается. Скорее видеокадр обрезается с боков.

Как привязать размеры mediaView к его родительскому компоненту? ИЛИ Что не так с моим кодом?

следующий мой код ...

public void start(Stage primaryStage) {

        SplitPane video_text_SplitPane = new SplitPane();

        Label label2 = new Label("abdsanjasj");
        AnchorPane video_AnchorPane = new AnchorPane();

        video_AnchorPane.setBorder(new Border(new BorderStroke(Color.RED,
                BorderStrokeStyle.SOLID, CornerRadii.EMPTY, BorderWidths.DEFAULT)));
        AnchorPane anchorPane2 = new AnchorPane();

        AnchorPane.setBottomAnchor(label2, 0.0);
        AnchorPane.setTopAnchor(label2, 0.0);
        AnchorPane.setLeftAnchor(label2, 0.0);
        AnchorPane.setRightAnchor(label2, 0.0);

        anchorPane2.getChildren().add(label2);

//                  ---- CODE FOR PLAYING VIDEO ---
        MediaView mediaView = new MediaView();

        Media media = new Media("file:/E:/video.mp4");
        MediaPlayer mediaPlayer = new MediaPlayer(media);
        mediaView.setMediaPlayer(mediaPlayer);

        mediaPlayer.setAutoPlay(true);


//        mediaView.autosize();
//        DoubleProperty width = mediaView.fitWidthProperty();
//        DoubleProperty height = mediaView.fitHeightProperty();
//        width.bind(Bindings.selectDouble(mediaView.sceneProperty(), "width"));
//        height.bind(Bindings.selectDouble(mediaView.sceneProperty(), "height"));

        video_AnchorPane.getChildren().add(mediaView);
        video_text_SplitPane.getItems().add(video_AnchorPane);
        AnchorPane.setBottomAnchor(video_AnchorPane, 0.0);
        AnchorPane.setTopAnchor(video_AnchorPane, 0.0);
        AnchorPane.setLeftAnchor(video_AnchorPane, 0.0);
        AnchorPane.setRightAnchor(video_AnchorPane, 0.0);
        mediaView.setPreserveRatio(true);
        video_text_SplitPane.getItems().add(anchorPane2);


//      ---- CODE FOR BINDING MEDIA VIEW DIMENSIONS TO ITS PARENT CONTAINER---

        mediaView.fitWidthProperty().bind(video_AnchorPane.widthProperty());
        mediaView.fitHeightProperty().bind(video_AnchorPane.heightProperty());


        BorderPane video_textArea = new BorderPane();
        video_textArea.setTop(rangeSliderAnchorPane);
        video_textArea.setBottom(videoControlAnchorPane);
        video_textArea.setCenter(video_text_SplitPane);=

        SplitPane splitPane = new SplitPane();
        splitPane.setOrientation(Orientation.HORIZONTAL);
        splitPane.getItems().add(tree);

        splitPane.getItems().add(video_textArea);

        BorderPane layout = new BorderPane();
        layout.setTop(menuBar);
        layout.setCenter(splitPane);
        layout.setBottom(new StatusBar());

        Scene scene = new Scene(layout, 1920, 990);

        primaryStage.setTitle("Subtitles Generator");
        primaryStage.setScene(scene);
        primaryStage.show();

    }

1 Ответ

2 голосов
/ 05 февраля 2020

Это то, что вы пытаетесь достичь?

enter image description here

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...