複数選択リストを使おう

目次 携帯Javaのページ

最後の更新は次の時刻以降のはず. Time-stamp: "2002/10/26 Sat 21:52"

Panel に add() できる部品として, チェックボックスなどの複数選択リストがあります.

  • ListBox
  • の第1引数として, CHECK_BOX または MULTIPLE_CHOICE を与えればよいのです. 各自 API リファレンス読んでね.

    キーイベントの取得

    通常キー, ソフトキーが押された(Pressed), 離された(Released) というイベントは, KeyListener, SoftKeyListener を implements したクラスの
        public void keyPressed(Panel p, int key)
        public void keyReleased(Panel p, int key)
        public void softKeyPressed(int key)
        public void softKeyReleased(int key)
    
    で拾えます.

    サンプル

    上の二つと, Panel の切り替えの例を含みます.
    /*
      Panel での Key 入力をうけとる例他
      2002/10/24 
     */
    
    
    import com.nttdocomo.ui.*;
    
    /**
       Panel での Key 入力をうけとる例のクラス
     */
    public class PanelKeySample1 extends IApplication 
        implements ComponentListener,KeyListener,SoftKeyListener {
    
        /** 起動するときに呼ばれる メソッド. 必須. */
        public void start(){
    
    	// 配列の初期化
    	init();
    
    	// Panel を2個用意
    	p1=new Panel();
    	p2=new Panel();
    
    	// Panel 1////////////////////////////////////////////////////////
    
    	/****************************************************************/
    	// Label を追加
    	Label lb1=new Label("好きなマペットは?");
    	p1.add(lb1);
    
    	/****************************************************************/
    	// ListBox を追加
    	li1 = new ListBox(ListBox.CHECK_BOX);
    	// CHECK_BOX, MULTIPLE_CHOICE のいずれか。
    	li1.append("カーミット");
    	li1.append("クッキーモンスター");
    	li1.append("エルモ");
    	li1.append("ビッグバード");
    	li1.append("アーニー");
    	li1.append("バート");
    	p1.add(li1);
    
    	/****************************************************************/
    	// (表示用) TextBox を追加
    	tb1 = new TextBox("",16,4,TextBox.DISPLAY_ANY);
    	//                "表示する文字列",横,縦,そのまま表示指定
    	tb1.setEditable(false); // ユーザーは入力不可。
    	tb1.setText("イベント表示領域。これは最初に表示される内容。");
    	p1.add(tb1);
    
    	/****************************************************************/
    	// ソフトキーのラベル
    	p1.setSoftLabel(Frame.SOFT_KEY_1,"次");
    	p1.setSoftLabel(Frame.SOFT_KEY_2,"終了");
    
    	/****************************************************************/
    	p1.setComponentListener(this);// このクラスの componentAction を使う
    	p1.setSoftKeyListener(this);//このクラスの softKeyPressed/Released を使う
    
    	// Panel 2 ///////////////////////////////////////////////////////
    
    	/****************************************************************/
    	// Label を追加
    	Label lb2=new Label("キー入力");
    	p2.add(lb2);
    
    	/****************************************************************/
    	// (表示用) TextBox を追加
    	tb2 = new TextBox("",16,4,TextBox.DISPLAY_ANY);
    	//                "表示する文字列",横,縦,そのまま表示指定
    	tb2.setEditable(false); // ユーザーは入力不可。
    	tb2.setText("イベント表示領域。これは最初に表示される内容。");
    	p2.add(tb2);
    
    	/****************************************************************/
    	// ソフトキーのラベル
    	p2.setSoftLabel(Frame.SOFT_KEY_1,"次");
    	p2.setSoftLabel(Frame.SOFT_KEY_2,"ソ2");
    
    	/****************************************************************/
    	p2.setKeyListener(this);//このクラスの KeyPressed/Released を使う
    	p2.setSoftKeyListener(this);//このクラスの softKeyPressed/Released を使う
    
    	// 最初は p1 を表示。(ソフトキーが押されたら切り替え)
    	Display.setCurrent(p1);	
        }
    
        /** 文字列配列の初期化*/
        void init(){
    	keyname[Display.KEY_0]="0";
    	keyname[Display.KEY_1]="1";
    	keyname[Display.KEY_2]="2";
    	keyname[Display.KEY_3]="3";
    	keyname[Display.KEY_4]="4";
    	keyname[Display.KEY_5]="5";
    	keyname[Display.KEY_6]="6";
    	keyname[Display.KEY_7]="7";
    	keyname[Display.KEY_8]="8";
    	keyname[Display.KEY_9]="9";
    	keyname[Display.KEY_ASTERISK]="*";
    	keyname[Display.KEY_DOWN]="↓";
    	keyname[Display.KEY_LEFT]="←";
    	keyname[Display.KEY_UP]="↑";
    	keyname[Display.KEY_RIGHT]="→";
    	keyname[Display.KEY_POUND]="#";
    	keyname[Display.KEY_SELECT]="選択";
    
    	softkeyname[Frame.SOFT_KEY_1]="ソフトキー1";
    	softkeyname[Frame.SOFT_KEY_2]="ソフトキー2";
        }
    
    
        /** implements ComponentListner を宣言したらこれが必要*/
        public void componentAction(Component source, int type, int param){
    	if ( source == li1 && type == SELECTION_CHANGED ){
    
    	    String s="";
    	    int count=0;
    	    for(int i=0; i < li1.getItemCount(); i++){
    		if(li1.isIndexSelected(i)){
    		    if( count > 0){
    			s=s+ "と";
    		    }
    		    s = s + li1.getItem(i);
    		    count++;
    		}
    	    }
    	    tb1.setText(s + "の" + count + "人が好きなのですね。" );
    	}
        }
    
        /** implements keyListener を宣言したらこれが必要 */
        public void keyPressed(Panel p, int key){ infoKey(0,key); }
    
        /** implements keyListener を宣言したらこれが必要 */
        public void keyReleased(Panel p, int key){ infoKey(1,key); }
    
        /** implements softKeyListener を宣言したらこれが必要 */
        public void softKeyPressed(int key){
    	infoSoftKey(0,key);
    	if( key==Frame.SOFT_KEY_1 ){
    	    if( Display.getCurrent()==p1 ){
    		Display.setCurrent(p2);
    	    } else if ( Display.getCurrent()==p2 ){
    		Display.setCurrent(p1);
    	    }
    	} else if ( key==Frame.SOFT_KEY_2){
    	    infoSoftKey(0,key);
    	    if( Display.getCurrent()==p1 ){
    		terminate();
    	    } else if ( Display.getCurrent()==p2 ){
    
    	    }
    	}
        };
    
        /** implements softKeyListener を宣言したらこれが必要 */
        public void softKeyReleased(int key){
    	infoSoftKey(1,key);
        };
    
    
        /** キーの名前を textbox に表示するメソッド*/
        void infoKey(int action, int key){
    	tb2.setText(keyname[key]+  actionname[action]);
        }
    
        /** ソフトキーの名前を textbox に表示するメソッド*/
        void infoSoftKey(int action, int key){
    	tb2.setText(softkeyname[key]+  actionname[action]);
        }
    
    
        Panel p1,p2;
        TextBox tb1,tb2;
        ListBox li1;
    
        private static String actionname[] = {"が押された","が離された"};
    
        /** キーの個数は 0x1F 個以下*/
        private static String keyname[] = new String[0x1F];
    
        /** ソフトキーは2個 */
        private static String softkeyname[] = new String[2];
        
    }
    
    
    
    /* 
       Local Variables:
       mode: java
       End:
    */
    
    
    

    課題

    これまでに作ったプログラムに, ソフトキーによる入力を追加しよう. 余裕があれば, 普通のキーによる入力も追加しよう.

    課題

    複数選択リストボックスを使って, 家族構成を質問するプログラムを作ろう. 余裕があれば, 兄弟姉妹については人数も質問するようにしよう. Dialog なども適当に使ってよい. または, 複数選択リストボックスを使って好きなプログラムを作ろう.
    Copyright © 2002-2003 Saburo Higuchi. All rights reserved.
    樋口三郎, http://www.math.ryukoku.ac.jp/~hig/ hig mail address