Качели и Явафкс

1

Я пытаюсь поместить измененный медиаплеер в панель с вкладками. Единственный способ изменить размер носителя - использовать медиа-просмотр. Но когда я пытаюсь добавить контроллер, я не могу передать MediaControl в javafx.scene.Group.

Мой код;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;

public class JavaFX_insideTab {

private static final String MEDIA_URL = "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv";

private static void initFxLater(JFXPanel panel) {
    Group root = new Group();
    Scene scene = new Scene(root, 450, 200);
    // create media player
    Media media = new Media(MEDIA_URL);
    MediaPlayer mediaPlayer = new MediaPlayer(media);
    mediaPlayer.setAutoPlay(true);

    MediaView mediaView = new MediaView(mediaPlayer);

    mediaView.setFitWidth(450);
    mediaView.setFitHeight(200);

    MediaControl mediaControl = new MediaControl(mediaPlayer);
    scene.setRoot(mediaControl);

    ((Group) scene.getRoot()).getChildren().add(mediaView);

        panel.setScene(scene);
}

private static void initSwingLater() {
    JFrame jFrame = new JFrame("- JFrame -");
    jFrame.setSize(540, 426);
    jFrame.setVisible(true);
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jFrame.getContentPane().setLayout(null);

    final JFXPanel jFXPanel = new JFXPanel();
    jFXPanel.setBounds(0, 0, 540, 188);

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    tabbedPane.setBounds(0, 0, 528, 392);
    jFrame.getContentPane().add(tabbedPane);

    JPanel panel = new JPanel();
    tabbedPane.addTab("New tab", null, panel, null);
    JPanel playerpanel = new JPanel();
    tabbedPane.addTab("Media Player", null, playerpanel, null);

    JPanel panel_1 = new JPanel();
    playerpanel.add(jFXPanel);

    Platform.runLater(new Runnable() {

    @Override
    public void run() {
    initFxLater(jFXPanel);
    }
    });

}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
    public void run() {
        initSwingLater();
    }

    });
}

}

где я иду не так?

Теги:
javafx
swing

1 ответ

0
Лучший ответ

Предполагая, что это ваш MediaControl, он уже является подкласс Parent, поэтому вам не нужно размещать его в родительской группе.

Вы можете использовать следующий код:

private static void initFxLater(JFXPanel panel) {
    MediaPlayer mediaPlayer = new MediaPlayer(new Media(MEDIA_URL));
    mediaPlayer.setAutoPlay(true);

    MediaView mediaView = new MediaView(mediaPlayer);
    mediaView.setFitWidth(450);
    mediaView.setFitHeight(200);

    panel.setScene(new Scene(new MediaControl(mediaPlayer));
}

Я не совсем уверен, что вы подразумеваете под "изменением размера медиа", но приведенный выше код всегда будет определять размер носителя в пределах ограничивающей рамки размером 450х200 (с сохранением размера отношения к размеру носителя по умолчанию).

  • 0
    Спасибо за ваш ответ, он приближает меня к моей цели. Однако это, кажется, производит 10-миллиметровый игрок с немасштабированным фильмом. То, что я пытаюсь сделать, это создать небольшой (400 х 200 дюймов) масштабированный фильм с элементом управления мультимедиа на панели с вкладками. Под масштабным фильмом я подразумеваю, что весь фильм помещается в элемент управления 400 x 200. Надеюсь, это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню