範囲表示用部品であるHRangeのサンプルコード。
本プログラムでは、Movie PlayListの現在の再生箇所表示をHRangeで表示している。
本プログラムでは、Movie PlayListの現在の再生箇所表示をHRangeで表示している。
Main.java
import java.awt.FlowLayout;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.DurationUpdateEvent;
import javax.media.Manager;
import javax.media.Player;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.bluray.net.BDLocator;
import org.davic.media.MediaLocator;
import org.havi.ui.HOrientable;
import org.havi.ui.HRange;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
public class Main implements Xlet, ControllerListener, Runnable {
HRange hr;
Player player;
public void initXlet(XletContext context){
try {
HScene hs= HSceneFactory.getInstance().getFullScreenScene(
HScreen.getDefaultHScreen().getDefaultHGraphicsDevice());
hs.setLayout(new FlowLayout());
BDLocator loc = new BDLocator("bd://1.PLAYLIST:00000");
MediaLocator ml = new MediaLocator(loc);
player = Manager.createPlayer(ml);
player.addControllerListener(this);
player.start();
// HRangeの取得と設定
hr = new HRange();
hr.setOrientation(HOrientable.ORIENT_LEFT_TO_RIGHT);
hr.setSize(1000, 50);
// HRangeの貼り付け
hs.add(hr);
hs.setVisible(true);
hr.requestFocus();
// 更新スレッドを起動
new Thread(this).start();
} catch (Throwable thr){
}
}
public void startXlet(){ }
public void pauseXlet(){ }
public void destroyXlet(boolean unconditional){}
public void controllerUpdate(ControllerEvent event) {
// Durationが取得できるのを待つ
if( event instanceof DurationUpdateEvent ){
// 再生時間をHRangeの範囲に設定
int duration = (int)player.getDuration().getSeconds();
hr.setRange(0, duration);
}
}
public void run() {
for( ;; ){
// 現在の再生時刻をHRangeに設定
int position = (int)player.getMediaTime().getSeconds();
hr.setValue( position );
try {
Thread.sleep(200);
} catch (Throwable thr){
}
}
}
}
関連する項目
- Interactive TV Standards: HAViのウィジェットについて詳しい
- 再生時間と再生時刻の取得: 本サンプルコードの元