- PR -

挙動の違うスクロールバー

1
投稿者投稿内容
taka
常連さん
会議室デビュー日: 2003/09/22
投稿数: 46
投稿日時: 2003-09-22 19:30
始めまして。

PC上でコンパイルしたプログラムをSharpザウルスで起動するとスクロールバーの挙動が違ってしまいます。
例えば、スクロールバーのツマミを最上部に位置(scroll value が"1"の状態)でツマミの下をクリックし"Block Increment"を行った後に"getValue()"を発行するとPC上だと元々のスクロール値の1に"setBlockIncrement()"で設定した5が足され6を取得できるが、ザウルス上では1のままです。この現象は"Unit Increment"でも同様でした。
なぜでしょうか?
下記に環境とテストソースを掲載します。
どうか、ご意見をください。
*PC
 -Windows2000
 -JBuilder 8
 -JDK 1.2.2

*ザウルス
 -Linux 2.4.18
 -ROM Ver 0.80
 -Jeode Java VM Ver PDA Edition

テストソース**************************************************************
public class Frame1 extends Frame {
 Scrollbar scrollbar1 = new Scrollbar();
 TextField textField1 = new TextField();
 Button button1 = new Button();

 //フレームのビルド
 public Frame1() {
  enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  try {
   jbInit();
  }
  catch(Exception e) {
   e.printStackTrace();
  }
 }
 //コンポーネントの初期化
 private void jbInit() throws Exception {
  //メインフレーム設定
  this.setSize(new Dimension(236, 283));
  this.setTitle("scroll");
  this.addMouseListener(new Frame1_this_mouseAdapter(this));
  this.setLayout(null);

  //スクロールバー設定
  scrollbar1.setBounds(new Rectangle(150, 14, 19, 253));
  scrollbar1.addAdjustmentListener(new Frame1_scrollbar1_adjustmentAdapter(this));
  scrollbar1.setMinimum(1);
  scrollbar1.setVisibleAmount(10);
  scrollbar1.setMaximum(scrollbar1.getVisibleAmount() + 10);
  scrollbar1.setValue(1);
  scrollbar1.setBlockIncrement(5);
  scrollbar1.setUnitIncrement(1);
  
  //テキストフィールド
  textField1.setText("1");
  textField1.setFont(new java.awt.Font("Dialog", 1, 15));
  textField1.setBounds(new Rectangle(27, 116, 54, 28));
  //ボタン
  button1.setFont(new java.awt.Font("Dialog", 1, 11));
  button1.setLabel("set");
  button1.setBounds(new Rectangle(89, 117, 32, 27));
  button1.addActionListener(new Frame1_button1_actionAdapter(this));

  this.add(button1, null);
  this.add(textField1, null);
  this.add(scrollbar1, null);
 }
 //ウィンドウが閉じられたときに終了するようにオーバーライド
 protected void processWindowEvent(WindowEvent e) {
  super.processWindowEvent(e);
  if (e.getID() == WindowEvent.WINDOW_CLOSING) {
   System.exit(0);
  }
 }

 void this_mouseClicked(MouseEvent e) {
  textField1.setText(String.valueOf(scrollbar1.getValue()));
 }

 void scrollbar1_adjustmentValueChanged(AdjustmentEvent e) {
  int keycode = e.getAdjustmentType();
  int intVal = 0;
  switch (keycode) {
   case AdjustmentEvent.UNIT_DECREMENT: //上矢印をクリック
    textField1.setText(String.valueOf(scrollbar1.getValue()));
    break;
   case AdjustmentEvent.UNIT_INCREMENT: //下矢印をクリック
    textField1.setText(String.valueOf(scrollbar1.getValue()));
    break;
   case AdjustmentEvent.BLOCK_DECREMENT: //つまみより上をクリック
    textField1.setText(String.valueOf(scrollbar1.getValue()));
    break;
   case AdjustmentEvent.BLOCK_INCREMENT: //つまみより下をクリック
    textField1.setText(String.valueOf(scrollbar1.getValue()));
    break;
   case AdjustmentEvent.TRACK: //つまみをドラック
    textField1.setText(String.valueOf(scrollbar1.getValue()));
    break;
  }
 }

 void button1_actionPerformed(ActionEvent e) {
  scrollbar1.setValue(Integer.parseInt(textField1.getText()));
  textField1.requestFocus();
 }

}
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-09-30 17:33
時間が経っているので、なんですが・・・。
今手元にザウルスがないので申し訳ありませんがアドバイスにはなりません
keycodeのマップがPCと異なっているのが原因ということはないでしょうか?
keycodeの値とUNIT_INCREMENTなどの定数が合っているか、を確認されるのが一番では
ないか、と考えます。


[ メッセージ編集済み 編集者: Ken-Lab 編集日時 2003-09-30 17:34 ]
taka
常連さん
会議室デビュー日: 2003/09/22
投稿数: 46
投稿日時: 2003-10-01 08:15
ご意見ありがとうございました。
半ば諦めかけていた所のご意見、感謝します。
「keycodeのマップがPCと異なっているのが原因」、
「keycodeの値とUNIT_INCREMENTなどの定数」
とありますが、コーディングの中で
・scrollbar1.setBlockIncrement(5);
・scrollbar1.setUnitIncrement(1);
のように初期値を設定しているのだからザウルス側がコーディングとおり設定されるのではないのでしょうか?

未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-10-01 09:41
再度ソースを確認しましたが、イベント処理自体の問題ではないですね。
一応ご確認されていると思いますが

ザウルスJava開発ガイド
http://developer.ezaurus.com/sl_j/doc/software.htm

このAPIに関連する箇所が見つけられなかったのでなんですが・・・
基本的にザウルスがJ2ME準拠であるため、一部の機能が省略されている
可能性があると考えます。
上記URLの関連リンクにザウルスアプリ開発サポートがありましたので、そちらにも
平行して確認されては如何でしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)