5 メディア機能を使用したアプリケーションの強化
この章では、ビデオ・ファイルを再生し、再生および一時停止ボタン、再生の進行状況を表示したり音量を調整するためのスライダ、繰返しをオンにするチェック・ボックスなど、ビデオ・プレーヤの一般的なコントロールを備えたMedia Playerアプリケーションについて説明します。
この章の内容を理解するには、開発者がメディア・アプリケーションの作成に使用できるjavafx.scene.mediaパッケージに関する知識が必要です。
メディアの統合について
次の主要クラスを使用して、任意のJavaFXメディア・アプリケーションをビルドできます。
-
Mediaクラス: メディア・リソースを表します。 -
MediaPlayerクラス: 指定したリソースを再生するためのコントロールを提供します。 -
MediaViewクラス: MediaPlayerオブジェクトによって再生されるメディア・リソースの表示を提供します。
MediaViewクラスはNodeクラスのサブクラスであるため、MediaViewオブジェクトをJavaFXシーンに追加することが可能です。 これは、JavaFXのメディア機能をデスクトップおよびWebアプリケーションに統合するための基礎となる重要な要素です。 JavaFXシーンをSwingアプリケーションに埋め込む方法を理解したところで、次はMedia Playerコンポーネントの統合によって、さらにアプリケーションを強化します。 MediaViewオブジェクトは、他のすべてのノードと同じように、アニメーション化、変換および効果の適用が可能です。 このため、多くの独創的なタスクをサポートできます。
Media Playerアプリケーションのビルド
JavaFXアプリケーションへのメディア・アセットの組込みには、EmbeddedMediaPlayerアプリケーションの作成方法に関する詳細な手順が記載されています。 また、Netbeansプロジェクト・ソースも提供されます。 詳細な手順に従ってアプリケーションをビルドするか、サイドバー上のリンクを使用して、ソース・プロジェクトをダウンロードします。
この章で説明するMediaPlayerアプリケーションは、EmbeddedMediaPlayerアプリケーションに基づいていますが、その一部が次のように強化されています。
-
このアプリケーションは、プログラミングのベスト・プラクティスとして、外部のCSSファイルを使用します。
-
コントロール・バーに、繰返しをオンにするための
Loopチェック・ボックスが含まれています。
図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-3に太字で示した行を追加することによって、MediaControlコンストラクタを変更します。
コントロール・バーへの新しいコントロールの追加
コントロール・バーに新しいコントロールを追加する作業は、いくつかのステップを実行するだけで完了します。 MediaControlクラスのインスタンス変数を定義するセクションで、例5-4に示す、repeat変数の定義を削除します。
MediaControlクラスで、例5-5に示す、repeatインスタンス変数を使用するコードを削除します。
ここで、例5-6に示すように、クラス変数repeatBoxを追加します。
Media Playerのコントロール・バーに、ラベルとチェック・ボックスを追加します。 このコードは、MediaControlコンストラクタで、volumeSliderをバーに追加する行の後に配置します(例5-7を参照)。
例5-7
mediaBar.getChildren().add(volumeSlider);
Label repeatLabel = new Label(" Loop: ");
repeatLabel.setPrefWidth(50);
repeatLabel.setMinWidth(25);
mediaBar.getChildren().add(repeatLabel);
repeatBox = new CheckBox();
repeatBox.setSelected(true);
mediaBar.getChildren().add(repeatBox);
setBottom(mediaBar);
例5-8に示すように、チェック・ボックスの使用に関するロジックを、setOnEndOfMediaメソッドに実装します。
例5-8
mp.setOnEndOfMedia(new Runnable() {
public void run() {
if (repeatBox.isSelected()) {
mp.seek(mp.getStartTime());
} else {
playButton.setText(">");
stopRequested = true;
atEndOfMedia = true;
}
}
});
ファイアウォールの背後から実行しているときにMedia Playerがリモート・メディア・リソースにアクセスできるようにするには、次の形式でプロキシ設定を指定: -Dhttp.proxyHost=yourproxyhost.com -Dhttp.proxyPort=portNumber. この例では、yourproxyhost.comはプロキシで、portNumberは使用するポート番号です。


