HSceneの領域設定

HSceneの領域を設定するサンプルコード。複数のXlet間で画面を共有する場合に有用。
本サンプルでは、480×270の領域を持つHSceneを縦横40ずつ1秒毎にシフトしている。

 

Main.java

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
 
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
 
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HSceneTemplate;
 
public class Main extends Container implements Xlet{
    int w=480,h=270;
    int x=0, y=0;
 
    public void initXlet(XletContext xc){
        try {
            HSceneFactory hsf= HSceneFactory.getInstance();
            // Scene取得用のテンプレートを取得
            HSceneTemplate hst = new HSceneTemplate();
            // 希望表示サイズを設定
            hst.setPreference(HSceneTemplate.SCENE_PIXEL_DIMENSION,
                    new Dimension(w, h),
                    HSceneTemplate.REQUIRED);
            // 希望表示位置を設定
            hst.setPreference(HSceneTemplate.SCENE_PIXEL_LOCATION,
                    new Point(x, y),
                    HSceneTemplate.REQUIRED);
            // 希望にもっとも合致するHSceneを取得
            HScene hs = hsf.getBestScene(hst);
            hs.setVisible(true);
            Graphics g = hs.getGraphics();
            g.setColor(Color.white);
            for( ;; ){
                g.drawRect(0, 0, w, h);
                Thread.sleep(1000);
                x+=40; y+=40;
                // 希望表示位置を再設定
                hst.setPreference(HSceneTemplate.SCENE_PIXEL_LOCATION,
                        new Point(x,y),
                        HSceneTemplate.REQUIRED);
                // 再設定を実行
                hsf.resizeScene(hs, hst);
            }
 
        } catch (Throwable thr){
        }
    }
    public void startXlet(){}
    public void pauseXlet(){    }
    public void destroyXlet(boolean unconditional){ }
}

関連する項目

コメントを残す

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

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