プログレスバー

範囲表示用部品である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){
            }
        }
    }
}

関連する項目

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください