文档



JavaFX:互操作性
5 使用媒体功能优化应用程序(Release 8)
5 利用媒体功能的应用程序(Release 8)

5 利用媒体功能的应用程序

在本章中,您将回顾一个媒体播放器应用程序,该应用程序播放视频文件,并具有典型的视频播放器控件,如开始/暂停按钮、用于显示播放进度和调整音量的滑块,以及用于开启重复播放的复选框。

为了本章的目的,熟悉 javafx.scene.media 包,该包使开发人员能够创建媒体应用程序。

关于媒体集成

任何 JavaFX 媒体应用程序都可以使用以下关键类构建:

  • Media 类:表示媒体资源

  • MediaPlayer 类:提供播放指定资源的控件

  • MediaView 类:提供由 MediaPlayer 对象播放的媒体资源的视图

由于 MediaView 类是 Node 类的子类,因此可以将 MediaView 对象添加到 JavaFX 场景中。这是将 JavaFX 媒体功能集成到桌面和 Web 应用程序的主要因素。现在您已经知道如何将 JavaFX 场景嵌入到 Swing 应用程序中,您可以通过集成媒体播放器组件进一步提升应用程序的功能。您可以对 MediaView 对象进行动画处理、变换和应用效果,就像对其他节点一样。通过这种方式,您可以支持许多创意任务。

5 使用媒体功能优化应用程序(发布8)

构建媒体播放器应用程序

《将媒体资产整合到JavaFX应用程序中》文档提供了逐步说明如何创建EmbeddedMediaPlayer应用程序的指南。它还提供了Netbeans项目源代码。请按照详细说明构建应用程序,或使用侧边栏上的链接下载源代码项目。

本章讨论的MediaPlayer应用程序基于EmbeddedMediaPlayer应用程序,但有以下改进:

  • 作为最佳编程实践,该应用程序使用外部CSS文件。

  • 控制栏包含Loop复选框,用于打开重复播放。

应用程序窗口显示在图5-1中。

图5-1 媒体播放器应用程序窗口

图5-1的描述
"图5-1 媒体播放器应用程序窗口"的描述

您可以修改EmbeddeMediaPlayer项目,或将其另存为不同名称并修改新项目。

使用CSS为应用程序设置样式

要使用CSS为应用程序设置样式,首先创建mediaplayer.css文件,并将其保存在应用程序源文件所在的文件夹中。添加示例5-1中显示的样式规则。

示例5-1

#mediaControl {
    -fx-background-color: #bfc2c7;
}
#mediaViewPane {
    -fx-background-color: black;;
}

接下来,打开MediaControl.java文件,并从MediaControl构造函数中删除示例5-2中显示的行。

示例5-2

setStyle("-fx-background-color: #bfc2c7;");
mvPane.setStyle("-fx-background-color: black;");

然后,在MediaControl构造函数中添加示例5-3中显示的行。

示例5-3

public MediaControl(final MediaPlayer mp) {
    this.mp = mp;
    setId("mediaControl");

    mediaView = new MediaView(mp);
    Pane mvPane = new Pane();
    mvPane.getChildren().add(mediaView);
    mvPane.setId("mediaViewPane");
    setCenter(mvPane);

向控制栏添加新的控件

向控制栏添加新的控件只需要几个步骤。在定义MediaControl类的实例变量的部分,删除示例5-4中显示的repeat变量的定义。

示例5-4

private final boolean repeat = false;

MediaControl类中,删除使用repeat实例变量的代码,如示例5-5所示。

示例5-5

mp.setCycleCount(repeat ? MediaPlayer.INDEFINITE : 1);

现在按照示例5-6的方式添加类变量repeatBox

示例5-6

private CheckBox repeatBox;

将以下代码放置在MediaControl构造函数中,添加一个标签和复选框到媒体播放器的控制栏中,放置的位置是在添加volumeSlider到控制栏的代码之后,如示例5-7所示。

示例5-7

mediaBar.getChildren().add(volumeSlider);

Label repeatLabel = new Label("  循环: ");
repeatLabel.setPrefWidth(50);
repeatLabel.setMinWidth(25);
mediaBar.getChildren().add(repeatLabel);

repeatBox = new CheckBox();
repeatBox.setSelected(true);
mediaBar.getChildren().add(repeatBox);

setBottom(mediaBar);

setOnEndOfMedia方法中实现使用复选框的逻辑,如示例5-8所示。

示例5-8

mp.setOnEndOfMedia(new Runnable() {

    public void run() {
        if (repeatBox.isSelected()) {
            mp.seek(mp.getStartTime());
        } else {
            playButton.setText(">");
            stopRequested = true;
            atEndOfMedia = true;

        }
    }
});

要在防火墙后运行时使媒体播放器能够访问远程媒体资源,以以下格式提供代理设置:-Dhttp.proxyHost=yourproxyhost.com -Dhttp.proxyPort=portNumber。在这个示例中,yourproxyhost.com是你的代理,portNumber是要使用的端口号。

应用程序文件

源代码 

NetBeans项目 

关闭窗口

目录

JavaFX: 互操作性

展开 折叠