|
Unofficial "CLDC 1.0 + MIDP 1.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object javax.microedition.lcdui.Displayable javax.microedition.lcdui.Canvas
public abstract class Canvas
このクラスはアプリケーションがデバイスに近いレイヤー(低レベル)で処理を行う際にベースとなる抽象クラスです。
低レベルのイベント処理やディスプレイに任意のグラフィックスを記述する必要のあるアプリケーション(ゲームやグラフの表示等)向けの機能が提供されます。
アプリケーションはこのクラスの paint(javax.microedition.lcdui.Graphics)
メソッドを実装し、その他必要なメソッドをオーバーライドしてイベントを受け取るようにコードを記述します。
このクラスを実装したアプリケーションのクラスは、他のスクリーンと同等に使用することができます。
このため、必要に応じて高レベルの表示および処理と、低レベルの処理および表示を組み合わせて処理を記述することができます。
例えば必要なデータ入力を Form
オブジェクトによって受け取り、そのデータに基づいた表示を Canvas
クラスを実装した MIDlet アプリケーションのクラスによって行うことができます。
Canvas
は他のスクリーンとは異なり、必ず paint(javax.microedition.lcdui.Graphics)
メソッドの実装を提供する MIDlet アプリケーションの継承クラスを必要とします。
この継承クラスではディスプレイへの描画を行う paint(javax.microedition.lcdui.Graphics)
メソッドの他に、キー・イベント、ポインタ・イベント(デバイスがサポートしている場合)、表示通知、非表示通知をアプリケーションでオーバーライドするためのメソッドが用意されています。
これらのメソッドについての詳しい説明はイベント・デリバリ・メソッドを参照してください。
また、他のスクリーンと同様に Command
を設定し、その Command
を CommandListener
で受け取ることもできます。
Canvas
における Command
の扱いについてはコマンドを参照してください。
Canvas
クラスには、実装がイベントの発生時に呼び出す「イベント・デリバリ・メソッド」が定義されています。
これらのメソッドは実装がイベントの発生を検知すると呼び出します。
定義されているメソッドは以下の通りです。
showNotify()
hideNotify()
keyPressed(int)
keyRepeated(int)
keyReleased(int)
pointerPressed(int, int)
pointerDragged(int, int)
pointerReleased(int, int)
paint(javax.microedition.lcdui.Graphics)
CommandListener
の commandAction(Command, Displayable)
このうち paint(javax.microedition.lcdui.Graphics)
メソッドのみ抽象メソッドとして宣言されており、MIDlet アプリケーションはこのメソッドの実装を必ず提供しなければなりません。
その他のメソッドは Canvas
クラスでは空の実装を提供しています。
これらのメソッドは全てシリアルに呼び出されます。 つまり、上記いずれかのメソッドの処理中に再度呼び出されることは後述の例外を除いてありません。 このため、アプリケーションはイベントの処理時に前のイベント処理が終了していることを前提とした処理を記述することができます。
これらのイベント・デリバリ・メソッドの呼び出しの流れの中で Display
クラスの callSerially(Runnable)
メソッドの呼び出しも行われます。
このメソッドの詳細は callSerially(Runnable)
を参照してください。
例外となるのは、serviceRepaints()
メソッドを呼び出した場合です。
serviceRepaints()
メソッドはその処理の中で、その処理が完了するまで paint(javax.microedition.lcdui.Graphics)
メソッドが再帰的に呼ばれないようにブロックします。
これはイベント・デリバリ・メソッドの中の処理で serviceRepaints()
メソッドを呼び出した場合にも適用されます。
実装はキーストローク・イベントが発生すると Canvas
クラスの関連するイベント・デリバリ・メソッドを呼び出します。
それぞれのキー関係のイベント・デリバリ・メソッドには、そのメソッドが呼ばれる原因となったキー・コードが渡されます。
イベントによって MIDlet アプリケーションに通知される全てのキーはキー・コードが割り当てられています。
キー・コードは明らかに同一のキーを示す場合を除いて、キーごとに異なるキー・コードが割り当てられます。
MID Profile では ITU-T 標準規格電話のキーパッドに一致するキーのフィールド定義を行っています。 定義されているキー・コードは以下のとおりです。
KEY_NUM0
、
KEY_NUM1
、
KEY_NUM2
、
KEY_NUM3
、
KEY_NUM4
、
KEY_NUM5
、
KEY_NUM6
、
KEY_NUM7
、
KEY_NUM8
、
KEY_NUM9
、
KEY_STAR
、
KEY_POUND
。
実際のデバイスには上記以外のキーが存在する可能性があります。 しかし、互換性を保つために MIDlet アプリケーションは標準で規定している上記のキーだけを用いるべきです。
MID Profile 標準規格では、キー・コードの値はキーが示しているグリフ ( 字形 ) に対応する Unicode が割り当てられます。
デバイスに上記以外のキーが装備されている場合、キーに対応するキー・コードはそのキーに刻印された文字と明らかに一致する Unicode が割り当てられます。
もしも、キーに対応する文字が Unicode に存在しない場合、実装はキー・コードに負数の値を割り当てなければなりません。
また、ゼロ (0
)は不正なキーとして使用されます。
このため、MIDlet アプリケーションはキー・コードを Unicode 文字として扱うこともできます。
しかし、この手法は限られた場合にのみ有効です。
一般的な電話機で文字を入力する場合、複数回のキーストロークによって1文字を入力することがあります。
また、必要に応じて漢字変換等の処理が行われることもあります。
このため、キー・コードはどのキーが押されたか、という判定以上に用いるべきではありません。
テキストの入力を行う MIDlet アプリケーションは TextBox
クラスあるいは TextField
クラスを用いるべきです。
キー・コードに対応するキーの「名前」を必要とする場合は getKeyName(int)
メソッドを呼び出します。
これにより表示用のキーの「名前」を取得することができます。
MID Profile はデバイスのキー配置を規定していません。 このため、ゲームのようなアプリケーションで上下左右等のキー・イベントを互換性を保って取り扱うために、ゲーム・アクションという機構が用意されています。 ゲーム・アクションは渡されたキー・コードが以下のゲーム・アクションのいずれに該当するかを返します。
UP
、
DOWN
、
LEFT
、
RIGHT
、
FIRE
、
GAME_A
、
GAME_B
、
GAME_C
、
GAME_D
。
デバイスで使用されるほとんどのキー・コードは対応するゲーム・アクションが割り当てられます。
これに対して、1つのゲーム・アクションに複数のキー・コードが割り当てられることがあります。
このためキー・コードを getGameAction(int)
メソッドでゲーム・アクションに変換し、その後そのゲーム・アクションを getKeyCode(int)
メソッドでキー・コードへ変換した場合に、必ずしも当初のキー・コードとは一致しません(当然一致することもあります)。
ゲーム・アクションを使用する MIDlet アプリケーションを作成する場合、全てのキー・イベントにおいてゲーム・アクションを用いなければなりません。 特定のキー・コードがどのゲーム・アクションに割り当てられているかは実装によって異なります。 このため特定のキー・コードを特別扱いすると、正しくゲーム・アクションを処理できなくなる恐れがあります。
このゲーム・アクションとキー・コードの対応は MIDlet アプリケーションの実行中に変更されることはありません。
Canvas
は他のスクリーンと同様に Command
を使用することができます。
Command
はデバイスによって異なる形でキーやメニュー等に割り当てられます。
このため、Canvas
で Command
を使用する場合は、その Command
をユーザーが選択することが困難である可能性も想定すべきです。
例えばアクション・ゲームのプレイ中にユーザーに Command
の選択を強いるのは適切ではない場合があります。
デバイスのディスプレイに該当する Canvas
が表示されている状態に限り、各種イベント・デリバリ・メソッドが呼び出されます。
つまり、これらのメソッドは showNotify()
メソッドが呼び出されてから hideNotify()
メソッドが呼び出されるまでの期間内のみ呼び出されます。
該当する Canvas
(あるいは他の表示可能なオブジェクト)が現在表示されているか否かは Displayable
クラスから継承した isShown()
メソッドで確認することができます。
表示および非表示にはシステム・スクリーンも関連します。
詳しくはシステム・スクリーンを参照してください。
このため、showNotify()
メソッドと hideNotify()
メソッドは MIDlet アプリケーションがカレントの表示対象を変更する以外の場合にも頻繁に呼び出される可能性があります。
このため showNotify()
メソッドと hideNotify()
メソッドの処理はできる限り軽くなるように記述すべきです。
フィールドの概要 | |
---|---|
static int |
DOWN
ゲーム・アクションの下 (DOWN) を示す定数( =6 )です。 |
static int |
FIRE
ゲーム・アクションの FIRE を示す定数( =8 )です。 |
static int |
GAME_A
ゲーム・アクションの汎用 ( ボタン )A を示す定数( =9 )です。 |
static int |
GAME_B
ゲーム・アクションの汎用 ( ボタン )B を示す定数( =10 )です。 |
static int |
GAME_C
ゲーム・アクションの汎用 ( ボタン )C を示す定数( =11 )です。 |
static int |
GAME_D
ゲーム・アクションの汎用 ( ボタン )D を示す定数( =12 )です。 |
static int |
KEY_NUM0
ITU-T 定義0キーのキー・コードを示す定数( =48 )です。 |
static int |
KEY_NUM1
ITU-T 定義1キーのキー・コードを示す定数( =49 )です。 |
static int |
KEY_NUM2
ITU-T 定義2キーのキー・コードを示す定数( =50 )です。 |
static int |
KEY_NUM3
ITU-T 定義3キーのキー・コードを示す定数( =51 )です。 |
static int |
KEY_NUM4
ITU-T 定義4キーのキー・コードを示す定数( =52 )です。 |
static int |
KEY_NUM5
ITU-T 定義5キーのキー・コードを示す定数( =53 )です。 |
static int |
KEY_NUM6
ITU-T 定義6キーのキー・コードを示す定数( =54 )です。 |
static int |
KEY_NUM7
ITU-T 定義7キーのキー・コードを示す定数( =55 )です。 |
static int |
KEY_NUM8
ITU-T 定義8キーのキー・コードを示す定数( =56 )です。 |
static int |
KEY_NUM9
ITU-T 定義9キーのキー・コードを示す定数( =57 )です。 |
static int |
KEY_POUND
ITU-T 定義#キーのキー・コードを示す定数( =35 )です。 |
static int |
KEY_STAR
ITU-T 定義*キーのキー・コードを示す定数( =42 )です。 |
static int |
LEFT
ゲーム・アクションの左 (LEFT) を示す定数( =2 )です。 |
static int |
RIGHT
ゲーム・アクションの右 (RIGHT) を示す定数( =5 )です。 |
static int |
UP
ゲーム・アクションの上 (UP) を示す定数( =1 )です。 |
コンストラクタの概要 | |
---|---|
protected |
Canvas()
新しい Canvas クラスのオブジェクトを構築します。 |
メソッドの概要 | |
---|---|
int |
getGameAction(int keyCode)
キー・コードをそのデバイス上で定義されたゲーム・アクションへ置き換えます。 |
int |
getHeight()
表示可能なエリアの高さ ( ピクセル数 ) を得ます。 |
int |
getKeyCode(int gameAction)
ゲーム・アクションに対応する、このデバイスのキー・コードを返します。 |
String |
getKeyName(int keyCode)
指定されたキー・コードに対応する表示用の名前文字列を返します。 |
int |
getWidth()
表示可能なエリアの幅 ( ピクセル数 ) を得ます。 |
boolean |
hasPointerEvents()
プラットフォームがポインタの押し離しイベントをサポートしているかどうかチェックします。 |
boolean |
hasPointerMotionEvents()
プラットフォームがポインタ移動イベント(ポインタ・ドラッグ)をサポートしているかどうかをチェックします。 |
boolean |
hasRepeatEvents()
プラットフォームがキーが押されつづけるときにキー・リピート・イベントを生成するかどうかをチェックします。 |
protected void |
hideNotify()
Canvas がディスプレイの表示対象から外れた直後に実装がこのメソッドを呼び出します。 |
boolean |
isDoubleBuffered()
ダブル・バッファによるグラフィック描画をがインプリメントされているかどうかチェックします。 |
protected void |
keyPressed(int keyCode)
キーが押されると実装によって呼び出されます。 |
protected void |
keyReleased(int keyCode)
キーが放されると実装によって呼び出されます。 |
protected void |
keyRepeated(int keyCode)
キーが押されつづけてキー・リピートが発生する場合に実装によって呼び出されます。 |
protected abstract void |
paint(Graphics g)
Canvas の描画処理を実装するための抽象メソッドです。 |
protected void |
pointerDragged(int x,
int y)
ポインタがドラッグされたときに実装によって呼び出されます。 |
protected void |
pointerPressed(int x,
int y)
ポインタが押されると実装によって呼び出されます。 |
protected void |
pointerReleased(int x,
int y)
ポインタが放されたときに実装によって呼び出されます。 |
void |
repaint()
Canvas 全体の再描画を要求します。 |
void |
repaint(int x,
int y,
int width,
int height)
ディスプレイの指定された領域内の再描画を要求します。 |
void |
serviceRepaints()
未処理の再描画要求を直ちに実行します。 |
protected void |
showNotify()
Canvas がディスプレイ上に表示される直前に実装がこのメソッドを呼び出します。 |
クラス javax.microedition.lcdui.Displayable から継承されたメソッド |
---|
addCommand, isShown, removeCommand, setCommandListener |
クラス java.lang.Object から継承されたメソッド |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
フィールドの詳細 |
---|
public static final int UP
ゲーム・アクションの上 (UP) を示す定数(=1
)です。
public static final int DOWN
ゲーム・アクションの下 (DOWN) を示す定数(=6
)です。
public static final int LEFT
ゲーム・アクションの左 (LEFT) を示す定数(=2
)です。
public static final int RIGHT
ゲーム・アクションの右 (RIGHT) を示す定数(=5
)です。
public static final int FIRE
ゲーム・アクションの FIRE を示す定数(=8
)です。
public static final int GAME_A
ゲーム・アクションの汎用 ( ボタン )A を示す定数(=9
)です。
public static final int GAME_B
ゲーム・アクションの汎用 ( ボタン )B を示す定数(=10
)です。
public static final int GAME_C
ゲーム・アクションの汎用 ( ボタン )C を示す定数(=11
)です。
public static final int GAME_D
ゲーム・アクションの汎用 ( ボタン )D を示す定数(=12
)です。
public static final int KEY_NUM0
ITU-T 定義0キーのキー・コードを示す定数(=48
)です。
public static final int KEY_NUM1
ITU-T 定義1キーのキー・コードを示す定数(=49
)です。
public static final int KEY_NUM2
ITU-T 定義2キーのキー・コードを示す定数(=50
)です。
public static final int KEY_NUM3
ITU-T 定義3キーのキー・コードを示す定数(=51
)です。
public static final int KEY_NUM4
ITU-T 定義4キーのキー・コードを示す定数(=52
)です。
public static final int KEY_NUM5
ITU-T 定義5キーのキー・コードを示す定数(=53
)です。
public static final int KEY_NUM6
ITU-T 定義6キーのキー・コードを示す定数(=54
)です。
public static final int KEY_NUM7
ITU-T 定義7キーのキー・コードを示す定数(=55
)です。
public static final int KEY_NUM8
ITU-T 定義8キーのキー・コードを示す定数(=56
)です。
public static final int KEY_NUM9
ITU-T 定義9キーのキー・コードを示す定数(=57
)です。
public static final int KEY_STAR
ITU-T 定義*キーのキー・コードを示す定数(=42
)です。
public static final int KEY_POUND
ITU-T 定義#キーのキー・コードを示す定数(=35
)です。
コンストラクタの詳細 |
---|
protected Canvas()
メソッドの詳細 |
---|
public int getWidth()
Canvas
クラスは同じ値を持ちます。
public int getHeight()
Canvas
クラスは同じ値を持ちます。
public boolean isDoubleBuffered()
true
ならばダブル・バッファ、false
ならばそうではありません。public boolean hasPointerEvents()
true
ならばポインタ・イベントをサポートしているデバイスです。public boolean hasPointerMotionEvents()
true
ならばポインタ移動イベントをサポートしているデバイスです。public boolean hasRepeatEvents()
true
ならばリピートイベントをサポートしているデバイスです。public int getKeyCode(int gameAction)
ゲーム・アクションに対応する、このデバイスのキー・コードを返します。 実装は、ゲーム・アクションごとに1つの対応するキー・コードを提供します。 このため、指定されたゲーム・アクションに対応する常に有効なキー・コードを返します。
1つのゲーム・アクションは複数のキー・コードに対応している場合があります。
このため、getGameAction(int)
メソッドで変換した後に、再度このメソッドでキー・コードに戻した場合、最初のキー・コードとは異なる可能性があります。
キー・コードとゲーム・アクションの間の対応表はアプリケーションの実行中に変わる事はありません。
詳しくはゲーム・アクションを参照してください。
gameAction
- 対象のゲーム・アクションを渡します。
IllegalArgumentException
- もし gameAction
が有効なゲーム・アクションでないならば throw します。public String getKeyName(int keyCode)
指定されたキー・コードに対応する表示用の名前文字列を返します。 返される文字列はデバイスのキーに刻印されている内容あるいは近い内容となります。
このメソッドはユーザーに対して特定のキーを押すことを求めるようなメッセージの生成を行う際に使用します。 例えば MIDlet アプリケーションのキーマッピングをカスタマイズする際に、ユーザーが押したキーがデバイス独自の「START」キーである場合に、「開始する場合は START キー」と言うように表示することができます。
ゲーム・アクションに対応するキーをメッセージに含める場合は、getKeyCode(int)
メソッドでゲーム・アクションをキー・コードに変換してからこのメソッドを呼び出します。
例えば、
getKeyName(getKeyCode(Canvas.UP));
というように記述します。
このメソッドはキー・コードが有効である限り、1つの空ではない文字列を返します。
keyCode
- 要求するキー・コードを渡します。
IllegalArgumentException
- キー・コードが不正だった場合に throw します。public int getGameAction(int keyCode)
キー・コードをそのデバイス上で定義されたゲーム・アクションへ置き換えます。
そのキー・コードに対応するゲーム・アクションが存在しない場合は 0
を返します。
詳しくはゲーム・アクションを参照してください。
キー・コードとゲーム・アクションの間の対応表はアプリケーションの実行中に変わる事はありません。
keyCode
- 置き換える対象のキー・コードを渡します。
0
を返します。
IllegalArgumentException
- keyCode
が有効なキー・コードでないい場合に throw します。protected void keyPressed(int keyCode)
キーが押されると実装によって呼び出されます。
キー・コードに対応するゲーム・アクションを確定させる必要がある場合は、getGameAction
メソッドを呼び出します。
Canvas
クラスはこのメソッドの空の実装を持ちます。
MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。
keyCode
- 押されたキーに対応するキー・コードが渡されます。protected void keyRepeated(int keyCode)
キーが押されつづけてキー・リピートが発生する場合に実装によって呼び出されます。
キー・コードに対応するゲーム・アクションを確定させる必要がある場合は、getGameAction
メソッドを呼び出すことができます。
Canvas
クラスはこのメソッドの空の実装を持ちます。
MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。
keyCode
- キー・リピートが発生したキーのキー・コードが渡されます。hasRepeatEvents()
protected void keyReleased(int keyCode)
キーが放されると実装によって呼び出されます。
キー・コードに対応するゲーム・アクションを確定させる必要がある場合は、getGameAction
メソッドを呼び出すことができます。
Canvas
クラスはこのメソッドの空の実装を持ちます。
MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。
keyCode
- 放されたキーに対応するキー・コードが渡されます。protected void pointerPressed(int x, int y)
ポインタが押されると実装によって呼び出されます。
デバイスがポインタ・イベントをサポートするかどうかを決定するために hasPointerEvents()
メソッドを呼び出すことができます。
Canvas
クラスはこのメソッドの空の実装を持ちます。
MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。
x
- ポインタが押された水平位置がキャンバス内の相対位置で渡されます。y
- ポインタが押された垂直位置がキャンバス内の相対位置で渡されます。hasPointerEvents()
protected void pointerReleased(int x, int y)
ポインタが放されたときに実装によって呼び出されます。
デバイスがポインタ・イベントをサポートするかどうかを決定するために hasPointerEvents()
メソッドを呼び出すことができます。
Canvas
クラスはこのメソッドの空の実装を持ちます。
MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。
x
- ポインタが放された水平位置がキャンバス内の相対位置で渡されます。y
- ポインタが放された垂直位置がキャンバス内の相対位置で渡されます。hasPointerEvents()
protected void pointerDragged(int x, int y)
ポインタがドラッグされたときに実装によって呼び出されます。
デバイスがポインタ・イベントをサポートするかどうかを決定するために hasPointerEvents()
メソッドを呼び出すことができます。
Canvas
クラスはこのメソッドの空の実装を持ちます。
MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。
x
- ポインタがドラッグされた水平位置がキャンバス内の相対位置で渡されます。y
- ポインタがドラッグされた垂直位置がキャンバス内の相対位置で渡されます。hasPointerEvents()
public final void repaint(int x, int y, int width, int height)
ディスプレイの指定された領域内の再描画を要求します。
このメソッドの呼び出し時に指定された領域をクリップ領域として Graphics
オブジェクトに設定し、paint(javax.microedition.lcdui.Graphics)
メソッドを呼び出す契機となります。
ただし、あくまでも契機として扱うため、このメソッドの1回の呼び出しが必ずしも1回の paint(javax.microedition.lcdui.Graphics)
メソッドの呼び出しにはつながりません。
つまり、複数回の呼び出しが1回の paint(javax.microedition.lcdui.Graphics)
メソッドの呼び出しに集約されることがあります。
paint(javax.microedition.lcdui.Graphics)
メソッドは repaint(int, int, int, int)
メソッドの呼び出しとは関係なく非同期に呼び出されます。
つまり、このメソッドは paint(javax.microedition.lcdui.Graphics)
メソッドによる再描画が終了することを待たずに処理を戻します。
その後、paint(javax.microedition.lcdui.Graphics)
メソッドはイベント処理のためのスレッドから呼び出されます。
アプリケーションが paint(javax.microedition.lcdui.Graphics)
メソッドと同期を必要とする場合、Display
クラスの callSerially(Runnable)
メソッドを使用することができます。
詳しくはイベント・デリバリ・メソッドおよび callSerially(Runnable)
メソッドを参照してください。
また、明示的に同期を取るために serviceRepaints()
メソッドを呼び出すこともできます。
以下の場合には再描画要求は無効となります。
Canvas
が非表示状態にある場合。
0
あるいはそれ以下の場合。
再描画要求を出す矩形領域は、原点座標 (x, y)
を左上とする右下へ向かって幅 width
、高さ height
の座標系で指定します。
x
- 再描画を開始する矩形の開始 X 座標を渡します。y
- 再描画を開始する矩形の開始 Y 座標を渡します。width
- 再描画する矩形の幅を渡します。height
- 再描画する矩形の高さを渡します。Display.callSerially(Runnable)
,
serviceRepaints()
public final void repaint()
Canvas
全体の再描画を要求します。
このメソッドの呼び出しは以下の呼び出しと等価です。
repaint(0, 0, getWidth(), getHeight());
public final void serviceRepaints()
未処理の再描画要求を直ちに実行します。
このメソッドは未処理の再描画要求を順次呼び出し、全ての処理が終了するまでブロックします。
未処理の再描画要求が存在しない場合あるいは Canvas
が表示状態に無い場合は何も処理を行いません。
このメソッドはアプリケーションの paint(javax.microedition.lcdui.Graphics)
メソッドの処理が全て終了するまでブロックします。
このため、このメソッドの呼び出し元で paint(javax.microedition.lcdui.Graphics)
メソッドの処理内でロックする可能性のあるオブジェクトをロックしている場合、デッドロックに陥る危険性があります。
paint(javax.microedition.lcdui.Graphics)
メソッドの処理と同期を取るための処理を実行する代替手段として Display
クラスの callSerially(Runnable)
メソッドを使用することができます。
このメソッドを使用すると、paint(javax.microedition.lcdui.Graphics)
メソッドの処理が行われた直後に特定の処理を呼び出すことができます。
詳しくはイベント・デリバリ・メソッドおよび callSerially(Runnable)
メソッドを参照してください。
Display.callSerially(Runnable)
protected void showNotify()
Canvas
がディスプレイ上に表示される直前に実装がこのメソッドを呼び出します。
実装はデフォルトの実装として空の実装を提供します。
このメソッドは表示状態が変化するたびに呼び出されます。 このためアプリケーションが明示的にカレントの表示対象を変更した場合以外にも頻繁に呼び出される可能性があります。 詳しくはイベント・デリバリ・メソッドを参照してください。
hideNotify()
protected void hideNotify()
Canvas
がディスプレイの表示対象から外れた直後に実装がこのメソッドを呼び出します。
実装はデフォルトの実装として空の実装を提供します。
このメソッドは表示状態が変化するたびに呼び出されます。 このためアプリケーションが明示的にカレントの表示対象を変更した場合以外にも頻繁に呼び出される可能性があります。 詳しくはイベント・デリバリ・メソッドを参照してください。
showNotify()
protected abstract void paint(Graphics g)
Canvas
の描画処理を実装するための抽象メソッドです。
アプリケーションは任意のグラフィックを描画する実装を提供しなければなりません。
このメソッドが呼び出されるのは Canvas
が可視状態、つまり Displayable
クラスから継承した isShown()
メソッドが true
を返す状態の場合のみです。
実装がこのメソッドを呼び出す際に渡す Graphics
オブジェクトには、再描画が必要な領域がクリップ領域として設定されています。
アプリケーションによるこのメソッドの実装はこの領域内の全てのピクセルに対して描画を行わなければなりません。
アプリケーションはクリップ領域内の以前の描画内容およびこのメソッドが呼び出された要因についていかなる仮定を行ってはなりません。
これは、このメソッドを呼び出す要因がアプリケーションによる repaint()
メソッドの1回の呼び出しだけではなく複数回の呼び出しをまとめたものである可能性や、実装やシステムによるものである可能性があるためです。
このため、クリップ領域内のピクセルに特別な前提を置くと不適切な描画結果となることがあります。
このメソッドの呼び出し時に渡される Graphics
オブジェクトはこのメソッド内においてのみ有効です。
アプリケーションはこのオブジェクトを保存し、このメソッドの外で使用してはなりません。
このような記述をした場合の処理結果は不確定です。
実装はダブル・バッファリングをサポートしている場合があります。
この場合、このメソッドによる描画はこのメソッドの処理が戻るまでディスプレイに描画結果は表示されません。
実装がダブル・バッファをサポートしているか否かは isDoubleBuffered()
メソッドによって判定することができます。
Canvas
の表示内容は実装によって保持されません。
このため Canvas
が非表示になった後、次に表示される際には showNotify()
メソッドが呼ばれた直後に Canvas
全体をクリップ領域に設定した Graphics
オブジェクトを渡してこのメソッドを呼び出すでしょう。
他のキーやポインタ関係のイベント・デリバリ・メソッドの前にこのメソッドが呼び出されるとは限りません。 このため、できる限りこのメソッドの処理は軽くすべきです。 負荷の高い描画処理を必要とする場合、MIDlet アプリケーションはオフスクリーン・イメージを作成し、それを次回のこのメソッドによる描画することもできます。 呼び出し関係の詳しい説明はイベント・デリバリ・メソッドを参照してください。
アプリケーションのコードは paint()
メソッドを呼び出してはなりません。
このメソッドは実装によってのみ呼ばれます。
このメソッドにパラメータに渡される Graphics
オブジェクトは次のように設定されています。
Canvas
内の少なくとも1ピクセルを含んでいます。
Font.getDefaultFont()
メソッドで返されるフォントと同じです。
SOLID
です。
g
- Canvas
を描画するための Graphics
オブジェクトが渡されます。
|
Unofficial "CLDC 1.0 + MIDP 1.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |