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
は使用するポート番号です。