java.awt.Buttonクラスに相当するHTextButtonのサンプルコード。ボタンのpress/releaseでボタンのラベルが変わる。
Main.java
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.dvb.ui.FontFactory;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
import org.havi.ui.HState;
import org.havi.ui.HTextButton;
public class Main implements Xlet, KeyListener{
HTextButton htb1, htb2;
public void initXlet(XletContext context){
try {
HScene hs= HSceneFactory.getInstance().getFullScreenScene(
HScreen.getDefaultHScreen().getDefaultHGraphicsDevice());
// AWTの各種レイアウトをサポート
hs.setLayout(new GridLayout(1,2));
// モナーフォントを使用
Font f = new FontFactory().createFont("Mona", java.awt.Font.BOLD,72);
// 日本語も使用可能
htb1 = new HTextButton("ボタン1");
htb1.setFont(f);
// キーリスナーを登録
htb1.addKeyListener(this);
htb2 = new HTextButton("ボタン2");
htb2.setFont(f);
htb2.addKeyListener(this);
// 上下左右キーの移動先を指定
htb1.setFocusTraversal(htb2,htb2,htb2,htb2);
htb2.setFocusTraversal(htb1,htb1,htb1,htb1);
hs.add(htb1);
hs.add(htb2);
hs.setVisible(true);
htb1.requestFocus();
} catch (Throwable thr){
}
}
public void startXlet(){ }
public void pauseXlet(){ }
public void destroyXlet(boolean unconditional){}
public void keyPressed(KeyEvent e) {
if( e.getComponent() instanceof HTextButton ){
HTextButton htb = (HTextButton)e.getComponent();
if( htb.equals(htb1) ) {
htb1.setTextContent("Button1", HState.ALL_STATES);
} else if( htb.equals(htb2) ){
htb2.setTextContent("Button2", HState.ALL_STATES);
}
}
}
public void keyReleased(KeyEvent e) {
if( e.getComponent() instanceof HTextButton ){
HTextButton htb = (HTextButton)e.getComponent();
if( htb.equals(htb1) ) {
htb1.setTextContent("ボタン1", HState.ALL_STATES);
} else if( htb.equals(htb2) ){
htb2.setTextContent("ボタン2", HState.ALL_STATES);
}
}
}
public void keyTyped(KeyEvent e) {}
}
関連する項目
- Interactive TV Standards: HAViのウィジェットについて詳しい