Как сделать так, чтобы MediaView оставался в центре панели в моем приложении JavaFX MediaPlayer?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как сделать так, чтобы MediaView оставался в центре панели в моем приложении JavaFX MediaPlayer?

Сообщение Anonymous »


Я создаю медиаплеер, используя JavaFX (IntelliJ). Я поместил MediaView внутри панели (mediaPane) в центре BorderPane. Я хотел, чтобы mediaView всегда находился в центре панели, сохраняя при этом свое измерение связанным с панелью.

Вот мой файл FXML.

Вот мой класс контроллера

пакет com.example.jmediaplayer; импортировать статический com.example.jmediaplayer.constants.Constants.*; импортировать javafx.application.Platform; импортировать javafx.event.ActionEvent; импортировать javafx.fxml.FXML; импортировать javafx.fxml.Initializable; импортировать javafx.scene.control.*; импортировать javafx.scene.image.Image; импортировать javafx.scene.input.MouseEvent; импортировать javafx.scene.layout.*; импортировать javafx.scene.media.Media; импортировать javafx.scene.media.MediaView; импортировать javafx.stage.FileChooser; импортировать javafx.stage.FileChooser.ExtensionFilter; импортировать javafx.util.Duration; импортировать java.io.File; импортировать java.net.URL; импортировать java.util.Objects; импортировать java.util.ResourceBundle; публичный класс MediaPlayer реализует Initializable { @FXML частный фон BorderPane; @FXML частная панель mediaPane; @FXML частная марка mediaTitle, appTitle; @FXML частная кнопка mediaActionButton, mediaNextbutton, mediaPreviousButton, mediaResetButton, openFileButton; @FXML частный слайдер ProgressSlider; @FXML частный ComboBox SpeedBox; @FXML частный слайдер VolumeBar; @FXML частный VBox ProgressParent, titleParent; @FXML частная панель управления HBox, mediaSelect; @FXML частный MediaView MediaView; частные СМИ; частный javafx.scene.media.MediaPlayer mediaPlayer; частное логическое значение isPlaying = false, isSeeking = false; личный файл файла; частные конечные скорости String[] = {"0,25x", "0,5x", "1x", "1,25x", "1,5x", "1,75x", "2x"}; @Override public void инициализировать (URL-адрес, ResourceBundle resourcesBundle) { установитьLayout(); // mediaActionButton.setGraphic(new FontIcon()); configureProgressSlider(); for (Скорость строки: скорости) { SpeedBox.getItems().add(скорость); } SpeedBox.setOnAction(this::changeSpeed); mediaView.setFocusTraversable(истина); VolumeBar.valueProperty().addListener((observableValue, Number, t1) -> mediaPlayer.setVolume(volumeBar.getValue() * 0.01)); } частная пустота configureProgressSlider() { прогрессСлидер.setMin(0); прогрессСлидер.setMax(1); ProgressSlider.setValueChanging(истина); ProgressSlider.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> isSeeking = true); ProgressSlider.addEventFilter(MouseEvent.MOUSE_RELEASED, e -> isSeeking = false); ProgressSlider.valueProperty().addListener((observableValue, number, newValue) -> { если (isSeeking) { double newTime = newValue.doubleValue() * media.getDuration().toMillis(); mediaPlayer.seek(Duration.millis(newTime)); } }); } недействительный setLayout() { ProgressSlider.prefWidthProperty().bind(progressParent.widthProperty()); controlBar.prefWidthProperty().bind(progressParent.widthProperty()); appTitle.prefWidthProperty().bind(titleParent.widthProperty()); mediaSelect.prefWidthProperty().bind(titleParent.widthProperty()); mediaPane.prefWidthProperty().bind(background.widthProperty()); mediaPane.prefHeightProperty().bind(background.heightProperty()); // mediaView.setLayoutX((background.getWidth() - mediaView.getFitWidth()) / 2); // mediaView.setLayoutY((mediaPane.getHeight() - mediaView.getFitHeight()) / 2); // imagePane.prefWidthProperty().bind(background.widthProperty()); mediaView.fitWidthProperty().bind(mediaPane.widthProperty()); mediaView.fitHeightProperty().bind(mediaPane.heightProperty()); } @FXML void ChangeSpeed ​​(событие ActionEvent) { если (speedBox.getValue() == null) { mediaPlayer.setRate(1); } еще { mediaPlayer.setRate(Double.parseDouble(speedBox.getValue().substring(0, SpeedBox.getValue().length() - 1))); } } @FXML void mediaAction (событие ActionEvent) { если (isPlaying) { медиаплеер.пауза(); mediaActionButton.setText("Воспроизвести"); } еще { изменениеСпид (ноль); mediaPlayer.setVolume(volumeBar.getValue() * 0,01); медиаплеер.играть(); mediaActionButton.setText("Пауза"); } isPlaying = !isPlaying; } @FXML void mediaNext (событие ActionEvent) { } @FXML void mediaPrevious (событие ActionEvent) { } @FXML void mediaReset (событие ActionEvent) { если (mediaPlayer != ноль) { медиаплеер.стоп(); } } @FXML void selectFile (событие ActionEvent) { FileChooser fileChooser = новый FileChooser (); ExtensionFilter ExtensionFilter1 = новый ExtensionFilter("Файлы MP4 (*.mp4)", "*.mp4"); ExtensionFilter ExtensionFilter2 = новый ExtensionFilter("Файлы MP3 (*.mp3)", "*.mp3"); fileChooser.getExtensionFilters().add(extensionFilter1); fileChooser.getExtensionFilters().add(extensionFilter2); fileChooser.setSelectedExtensionFilter(extensionFilter1); файл = fileChooser.showOpenDialog (нуль); setupMedia (файл); } void setupMedia (Файл-файл) { если (файл != ноль) { mediaReset (ноль); Расширение строки = getFileExtension(файл); mediaTitle.setText(file.getName()); медиа = новый медиа(file.toURI().toString()); mediaPlayer = новый javafx.scene.media.MediaPlayer(медиа); mediaPlayer.currentTimeProperty().addListener((observableValue, продолжительность, newTime) -> { двойное значение = newTime.toMillis() / media.getDuration().toMillis(); ProgressSlider.setValue(значение); }); if ("mp3".equalsIgnoreCase(расширение)) { mediaView.setVisible(ложь); // imageView.setVisible(true); Изображение bg_for_mp3 = новое изображение(Objects.requireNonNull(getClass().getResource(IMAGE_PATH)).toExternalForm()); // imageView.setImage(bg_for_mp3); } else if ("mp4".equalsIgnoreCase(расширение)) { // imageView.setVisible(false); mediaView.setVisible(истина); mediaView.setMediaPlayer(mediaPlayer); } если (isPlaying) { медиаДействие (ноль); } ProgressSlider.setValue(0); } } @FXML void mediaViewClicked (событие MouseEvent) { // System.out.println("Установить макет X: " + (background.getWidth() - mediaView.getFitWidth()) / 2); // System.out.println("Установить макет Y: " + (mediaPane.getHeight() - mediaView.getFitHeight()) / 2); Platform.runLater(() -> { System.out.println(background.getWidth() == mediaView.getFitWidth()); System.out.println(mediaPane.getWidth() == mediaView.getFitWidth()); }); } Строка getFileExtension(Файл-файл) { int index = file.getName().lastIndexOf('.'); если (индекс > 0) { вернуть файл.getName().подстроку(индекс+1); } возвращаться ""; } } Я пытался использовать свойство привязки для привязки mediaPane к фону (BorderPane) и mediaView к mediaPane, например

mediaPane.prefWidthProperty().bind(background.widthProperty()); mediaPane.prefHeightProperty().bind(background.heightProperty()); mediaView.fitWidthProperty().bind(mediaPane.widthProperty()); mediaView.fitHeightProperty().bind(mediaPane.heightProperty()); Он проделал работу по обеспечению отзывчивости mediaView, но он по-прежнему придерживается только верхнего левого положения mediaPane, поскольку его макеты LayoutX и LayoutY установлены на 0. Таким образом, я попытался вручную установить макет X и макет Y как

mediaView.setLayoutX((background.getWidth() - mediaView.getFitWidth()) / 2); mediaView.setLayoutY((mediaPane.getHeight() - mediaView.getFitHeight()) / 2); Но это ничего не дало. Я также попытался напечатать значения для background.getWidth(), mediaView.getFitWidth() и mediaPane.getWidth() вместе, и кажется что их значения всегда равны, и поэтому значение (background.getWidth() - mediaView.getFitWidth())/2 всегда становится 0.

Затем я попытался удалить панель и добавить mediaView прямо в центр BorderPane, но тогда стало сложно привязать свойство heightProperty, поскольку у меня есть меню вверху, а элементы управления внизу.

И другого решения проблемы я не нашел.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Capture .mp4 видео от Javafx Mediaview [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Случайное исключение IllegalStateException в Android mediaPlayer.prepare или mediaPlayer.setDataSource
    Anonymous » » в форуме Android
    0 Ответы
    61 Просмотры
    Последнее сообщение Anonymous
  • Intellij javafx module info.java: модуль считывает пакет «javafx.fxml» как из "javafx.fxml ', так и" javafx.fxml'
    Anonymous » » в форуме JAVA
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Mediaview не отображается в встроенной рекламе Applovin, студии Android Java
    Anonymous » » в форуме JAVA
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Mediaview не отображается в встроенной рекламе Applovin, студии Android Java
    Anonymous » » в форуме Android
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»