アフィリエイト広告を利用しています
最新記事
日別アーカイブ

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2012年05月18日

ComponentListener について

少々ハマったので書きます。

Panel を使って画面を作成していましたが、利便性を向上させようと、
矢印キーで各コントロールを縦横無尽に動かせないかと、
試行錯誤していましたが、

全然反応しませんでした。

ComponentListener にイベントが来ないんですよね。

なぜかと調べたところ、仕様だということになりました。

Panel はコントロールを効率的に配置することができるのが便利ですが、
基本的なコントロール移動に矢印キーを使うので、
特殊用途でキャプチャーすることができません。

やるなら Canvas で行うこととなってます。

つまり、設計し直しです。

さて、がんばって Canvas に移植しますかね。。
posted by FJT at 06:16| DoJa

2012年05月15日

SoftKeyListener について

今回は、ソフトキーリスナーについて解説します。

ソフトキーとは、iアプリを起動したときに、
画面下部左右に割当てられたキーのことです。
通常は「メニュー」「終了」「戻る」など、画面遷移を行なうためのキーを割当てます。

設定方法ですが、Panel と Canvas で違います。

Panel の場合は、SoftKeyListener を定義して、 Display で設定します。
setSoftLabel(SOFT_KEY_1, "左");
setSoftLabel(SOFT_KEY_2, "右");
setSoftKeyListener((SoftKeyListener)this);

SoftKeyListener はインターフェースなので、implements で使用します。

キー入力判定は softKeyPressed で行ないます。
引数 softKey で、どちらのキーが押されたかを判断します。
Frame.SOFT_KEY_1 と Frame.SOFT_KEY_2 です。

Canvas の場合は、Frame.setSoftKeyListener が使えませんので、
ComponentListener を使います。
引数
そしてイベントは processEvent で実行されます。
引数 type に、どのようなイベントが実行されたのかを定義します。

引数 param に、どのキーが押されたのかかが入りますので、
以下で判定できます。
Display.KEY_RELEASED_EVENT

実際に入力されたキーについては、以下で判定できます。
Display.KEY_SOFT1
Display.KEY_SOFT2
posted by FJT at 22:38| DoJa

2012年05月13日

イベント駆動について

DoJa 開発では、イベントを主体とした開発を行います。
初期化、画面描画、キー入力、タイマー、終了時と、
何かのきっかけで動くようにしているのがイベント駆動です。
したがって、アプリは、待ちのアプリとして設計します。

他の言語に慣れている方々によっては、とっつきにくいかもしれませんが、
android 開発でも同様です。今後はイベント駆動になってくると思いますので、
慣れておいたほうが良いと思います。

複数の処理が同時に動いたり、想定していた順序で処理されないことなど、
イベント駆動ならではの現象があると思いますので、
あらためて、慣れておきましょう。
posted by FJT at 16:25| DoJa

2012年05月10日

配列について

今回は、配列について紹介します。
DoJa で使える配列は、通常のものと、Hashtable しかなさそうです。
普通の配列では、便利なメソッドは存在しません。
せめて javascript 並みのがあればよかったのですが、
length と clone しか使えないようです。
配列を効果的に使用するには、添字の値を有効に活用するしかないでしょう。
特に0からはじまる id で管理できるマスターには有効だと思います。

一方、連想配列としては Hashtable が使用できます。
こちらは、インデックス、値とも Object 型を使用しますので、
添字としての int 型は使用できません。
何か他の Object 型に変換するしかありません。

幸いなことに、String が Object にすることができますので、
基本的には String 型に valueOf で変換すれば良いでしょう。
したがって、Object 型が扱えるということは、何でもできるということです。

値の設定、取得は、以下のコードで行ないます。
Hashtable hastable = new Hashtable();
hashtable.put(String.valueof(12), Calendar.getInstance());
Calendar calendar = (Calendar) hashtable.get(String.valueof(12));
posted by FJT at 22:04| DoJa

2012年05月08日

UIの作成方法

iアプリで画面を作成するには、2種類の方法があります。

ひとつは Panel を使う方法です。
Panel には、テキスト、ラベル、ボタンなどの部品を並べて、
HTMLのように部品を組立てることができます。

Frame.add(new Label("ラベル"));
Frame.add(new ListBox(ListBox.SINGLE_SELECT));

Frame をベースにして部品を add メソッドでつなげて表示するのですが、
意図的に改行や、センタリングしたいときは HTMLLayout を使用します。

HTMLLayout layout = new HTMLLayout();
Frame.setLayoutManager(layout);
layout.begin(Layout.CENTER);
Frame.add(new Label("ラベル"));
layout.br();
Frame.add(new Text("テキスト"));
layout.end();

posted by FJT at 21:43| DoJa

日付の扱い方

日付の扱い方について、開設させていただきます。
javascript でもそうなのですが、日付を数値、または文字列で扱うことに違和感を覚えていました。
なぜか?

たとえば、変数に入っている値の一か月先を計算した場合、30日先を計算した場合、
それぞれ、計算が大変ですよね?
日付型であれば、月に1を足して12を超えたら、、、なんて処理が不要になります。

逆に気にしなければならないのが、時刻まで指定されてしまっている場合の
日付比較ですが、これは時刻部分をきれいにしてあげれば済む話です。

さて、DoJa の日付ですが、Calendar オブジェクトが便利です。
Calendar.getInstance() で、日付オブジェクトを生成できます。
初期値は、現在日時です。

オブジェクトは参照渡しなので、日付オブジェクトをコピーする場合は
以下の処理を行ないます。

Calendar a = Calendar.getInstance();
Calendar b = Calendar.getInstance();
b.setTime(a.getTime());

日付の比較については、単に不等号で比較できればいいのですが、
以下のメソッドが用意されているので、こちらを使いましょう。

// a が b より早い日時であれば true
a.before(b)

// a が b より遅い日時であれば true
a.after(b)

// a と b が同じであれば true
a.equals(b)

equals はインスタンスが別であっても、同じ日時であれば true になります。


日付の計算方法についてです。
set メソッドに、引数をつけて呼出します。
Calendar a = Calendar.getInstance();
// 2012 年を設定
a.set(Calendar.YEAR, 2012);
// 5 月を設定(指定月から 1 減算する必要があります)
a.set(Calendar.MONTH, 4);
// 1日を指定(0 を指定すると、前月末が指定されます)
a.set(Calendar.DAY_OF_MONTH, 1);
// 零時を指定
a.set(Calendar.HOUR, 0);
// 1 分足してみます
a.set(Calendar.MINUTE, a.get(Calendar.MINUTE) + 1);
// 0 秒を指定
a.set(Calendar.SECOND, 0);
// 0 ミリ秒を指定
a.set(Calendar.MILLISECOND, 0);

曜日を取得する場合は、以下のような使い方をします。

if(a.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
System.out.println("日曜日!");
}
posted by FJT at 05:40| DoJa

2012年05月06日

色の指定方法について

背景色や、文字色など、色の指定方法にひとクセあったので、
ここに書いておきます。

Graphics クラスに色の定数が定義されています。
たとえば Graphics.GRAY など、直観でわかるような名前になっているので、
そのまま使えると思っていました。

でも、実際には黒になるだけです。

調べてみると、色の指定は、もうひとつメソッドを挟まなければならなそうです。

Graphics.getColorOfName(Graphics.GRAY)

これで、ようやく色が取得できるわけですが、これは遠回りな気がします。
とりあえず、他の変数に格納しておいたほうが使いやすそうです。
自分は Coloe クラスを定義して、使っています。

static class Color {
static final int AQUA = Graphics.getColorOfName(Graphics.AQUA);

}
posted by FJT at 22:39| DoJa

2012年05月04日

スクラッチパッドについて

iアプリデータの保存領域である、スクラッチパッドについてご紹介します。

iアプリを動かしていると、設定情報を必要に応じて残しておきたい要件はありますよね?
こんなときに、スクラッチパッドを使用します。

まずは ADF 設定で、スクラッチパッド領域サイズ(SPsize)を設定します。
最大は400KB(409600)までです。

スクラッチパッドの使用方法ですが、DataInputStream を使用して、
スクラッチパッドの領域を指定するだけです。
このスクラッチパッド領域は、以下の構文で指定します、
"scratchpad:///0;pos=0"

"scratchpad:///0" は、スクラッチパッド領域の先頭を使用することを宣言しています。
次に、読込開始位置を指定します。スクラッチパッド領域の先頭の場合は"pos=0"です。

読込メソッドですが、readInt や readBoolean、readUTF(String 型で読込)もありますので、
様々な型として読込むことが可能です。ほぼ直観で使えます。

スクラッチパッドへの書出は DataOutputStream を使用します。
一連の読込メソッドと同じようなものがありますので、それらを使って書出します。
posted by FJT at 06:33| DoJa

2012年05月02日

クラスの定義について

今回は、クラスの定義方法について書きます。

ひとつのアプリケーションを作成するときに、
いくつかの処理をまとめておいて、小さなライブラリの単位にまとめておける、
再利用ができる、それがクラスの使い勝手の良さではないでしょうか?

java アプリケーションでは、基本的にはクラスは分けておくのが普通です。
しかし、DoJa アプリの場合は、1ファイルにまとめて記述したほうが
生成される jar ファイルの容量が節約されるので、容量制限に厳しいiアプリの世界では
1ファイルにまとめたほうが良いと思います。

クラスを定義する方法について、まずは class を使って、クラスを宣言します。

class UserClass {
}

次に、クラスを実際に使用します。これは new キーワードを使用します。

private UserClass uc = new UserClass();

最初の「UserClass」は型宣言部です。クラスを書きます。
次に出てくる「new UserClass()」では、ここで実際にインスタンスを生成して、
クラスを実体化します。

また、クラス宣言部内に、クラス名と同じ名前のメソッドを定義しておきます。
これを、コンストラクタといいますが、new を使ってインスタンス生成されたときに実行されます。

class UserClass{
 UserClass(){
  ...
 }
}

コンストラクタは引数の型や個数を変えることで、複数定義することができます。

class UserClass {
 UserClass(){
 }
 // new UserClass(12) などのように、引数が数値の場合
 UserClass(int aaa){
 }
 // new UserClass("12") などのように、引数が文字列の場合
 UserClass(String bbb){
 }
}
posted by FJT at 23:15| DoJa

2012年05月01日

即起動モードについて

iアプリ開発で、非常に使いづらいものがありましたので紹介しておきます。

それは「即起動モード」です。

iアプリをダウンロードしてから、「すぐに起動しますか?」のメッセージが表示されて、
起動させるときのモードなのですが、機能制限が多すぎです。
スクラッチパッドが使えないので、保存されているデータを使用、または保存もできません。

どうしてこのようなモードがあるのか不思議です。
今は「お手数ですが、起動しなおしてください」のメッセージを表示するようにしています。
他に解決策があれば探してみたいと思います。
posted by FJT at 23:28| DoJa
プロフィール
FJTさんの画像
FJT
使えそうな技術情報を掲載しています。 ぜひ、役立ててください。
プロフィール
リンク集
×

この広告は30日以上新しい記事の更新がないブログに表示されております。