Unofficial
"CLDC 1.0
+ MIDP 1.0"
API Reference.
(日本語版)

javax.microedition.lcdui
クラス Canvas

java.lang.Object
  上位を拡張 javax.microedition.lcdui.Displayable
      上位を拡張 javax.microedition.lcdui.Canvas

public abstract class Canvas
extends Displayable

このクラスはアプリケーションがデバイスに近いレイヤー(低レベル)で処理を行う際にベースとなる抽象クラスです。 低レベルのイベント処理やディスプレイに任意のグラフィックスを記述する必要のあるアプリケーション(ゲームやグラフの表示等)向けの機能が提供されます。 アプリケーションはこのクラスの paint(javax.microedition.lcdui.Graphics) メソッドを実装し、その他必要なメソッドをオーバーライドしてイベントを受け取るようにコードを記述します。

このクラスを実装したアプリケーションのクラスは、他のスクリーンと同等に使用することができます。 このため、必要に応じて高レベルの表示および処理と、低レベルの処理および表示を組み合わせて処理を記述することができます。 例えば必要なデータ入力を Form オブジェクトによって受け取り、そのデータに基づいた表示を Canvas クラスを実装した MIDlet アプリケーションのクラスによって行うことができます。

概要

Canvas は他のスクリーンとは異なり、必ず paint(javax.microedition.lcdui.Graphics) メソッドの実装を提供する MIDlet アプリケーションの継承クラスを必要とします。 この継承クラスではディスプレイへの描画を行う paint(javax.microedition.lcdui.Graphics) メソッドの他に、キー・イベント、ポインタ・イベント(デバイスがサポートしている場合)、表示通知、非表示通知をアプリケーションでオーバーライドするためのメソッドが用意されています。 これらのメソッドについての詳しい説明はイベント・デリバリ・メソッドを参照してください。 また、他のスクリーンと同様に Command を設定し、その CommandCommandListener で受け取ることもできます。 Canvas における Command の扱いについてはコマンドを参照してください。

イベント・デリバリ・メソッド

Canvas クラスには、実装がイベントの発生時に呼び出す「イベント・デリバリ・メソッド」が定義されています。 これらのメソッドは実装がイベントの発生を検知すると呼び出します。

定義されているメソッドは以下の通りです。

このうち 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_NUM0KEY_NUM1KEY_NUM2KEY_NUM3KEY_NUM4KEY_NUM5KEY_NUM6KEY_NUM7KEY_NUM8KEY_NUM9KEY_STARKEY_POUND

実際のデバイスには上記以外のキーが存在する可能性があります。 しかし、互換性を保つために MIDlet アプリケーションは標準で規定している上記のキーだけを用いるべきです。

MID Profile 標準規格では、キー・コードの値はキーが示しているグリフ ( 字形 ) に対応する Unicode が割り当てられます。 デバイスに上記以外のキーが装備されている場合、キーに対応するキー・コードはそのキーに刻印された文字と明らかに一致する Unicode が割り当てられます。 もしも、キーに対応する文字が Unicode に存在しない場合、実装はキー・コードに負数の値を割り当てなければなりません。 また、ゼロ (0)は不正なキーとして使用されます。

このため、MIDlet アプリケーションはキー・コードを Unicode 文字として扱うこともできます。 しかし、この手法は限られた場合にのみ有効です。 一般的な電話機で文字を入力する場合、複数回のキーストロークによって1文字を入力することがあります。 また、必要に応じて漢字変換等の処理が行われることもあります。 このため、キー・コードはどのキーが押されたか、という判定以上に用いるべきではありません。 テキストの入力を行う MIDlet アプリケーションは TextBox クラスあるいは TextField クラスを用いるべきです。

キー・コードに対応するキーの「名前」を必要とする場合は getKeyName(int) メソッドを呼び出します。 これにより表示用のキーの「名前」を取得することができます。

ゲーム・アクション

MID Profile はデバイスのキー配置を規定していません。 このため、ゲームのようなアプリケーションで上下左右等のキー・イベントを互換性を保って取り扱うために、ゲーム・アクションという機構が用意されています。 ゲーム・アクションは渡されたキー・コードが以下のゲーム・アクションのいずれに該当するかを返します。

UPDOWNLEFTRIGHTFIREGAME_AGAME_BGAME_CGAME_D

デバイスで使用されるほとんどのキー・コードは対応するゲーム・アクションが割り当てられます。 これに対して、1つのゲーム・アクションに複数のキー・コードが割り当てられることがあります。 このためキー・コードを getGameAction(int) メソッドでゲーム・アクションに変換し、その後そのゲーム・アクションを getKeyCode(int) メソッドでキー・コードへ変換した場合に、必ずしも当初のキー・コードとは一致しません(当然一致することもあります)。

ゲーム・アクションを使用する MIDlet アプリケーションを作成する場合、全てのキー・イベントにおいてゲーム・アクションを用いなければなりません。 特定のキー・コードがどのゲーム・アクションに割り当てられているかは実装によって異なります。 このため特定のキー・コードを特別扱いすると、正しくゲーム・アクションを処理できなくなる恐れがあります。

このゲーム・アクションとキー・コードの対応は MIDlet アプリケーションの実行中に変更されることはありません。

コマンド

Canvas は他のスクリーンと同様に Command を使用することができます。 Command はデバイスによって異なる形でキーやメニュー等に割り当てられます。 このため、CanvasCommand を使用する場合は、その Command をユーザーが選択することが困難である可能性も想定すべきです。 例えばアクション・ゲームのプレイ中にユーザーに Command の選択を強いるのは適切ではない場合があります。

Canvas の表示と非表示

デバイスのディスプレイに該当する 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
 

フィールドの詳細

UP

public static final int UP

ゲーム・アクションの上 (UP) を示す定数(=1)です。

関連項目:
定数フィールド値

DOWN

public static final int DOWN

ゲーム・アクションの下 (DOWN) を示す定数(=6)です。

関連項目:
定数フィールド値

LEFT

public static final int LEFT

ゲーム・アクションの左 (LEFT) を示す定数(=2)です。

関連項目:
定数フィールド値

RIGHT

public static final int RIGHT

ゲーム・アクションの右 (RIGHT) を示す定数(=5)です。

関連項目:
定数フィールド値

FIRE

public static final int FIRE

ゲーム・アクションの FIRE を示す定数(=8)です。

関連項目:
定数フィールド値

GAME_A

public static final int GAME_A

ゲーム・アクションの汎用 ( ボタン )A を示す定数(=9)です。

関連項目:
定数フィールド値

GAME_B

public static final int GAME_B

ゲーム・アクションの汎用 ( ボタン )B を示す定数(=10)です。

関連項目:
定数フィールド値

GAME_C

public static final int GAME_C

ゲーム・アクションの汎用 ( ボタン )C を示す定数(=11)です。

関連項目:
定数フィールド値

GAME_D

public static final int GAME_D

ゲーム・アクションの汎用 ( ボタン )D を示す定数(=12)です。

関連項目:
定数フィールド値

KEY_NUM0

public static final int KEY_NUM0

ITU-T 定義0キーのキー・コードを示す定数(=48)です。

関連項目:
定数フィールド値

KEY_NUM1

public static final int KEY_NUM1

ITU-T 定義1キーのキー・コードを示す定数(=49)です。

関連項目:
定数フィールド値

KEY_NUM2

public static final int KEY_NUM2

ITU-T 定義2キーのキー・コードを示す定数(=50)です。

関連項目:
定数フィールド値

KEY_NUM3

public static final int KEY_NUM3

ITU-T 定義3キーのキー・コードを示す定数(=51)です。

関連項目:
定数フィールド値

KEY_NUM4

public static final int KEY_NUM4

ITU-T 定義4キーのキー・コードを示す定数(=52)です。

関連項目:
定数フィールド値

KEY_NUM5

public static final int KEY_NUM5

ITU-T 定義5キーのキー・コードを示す定数(=53)です。

関連項目:
定数フィールド値

KEY_NUM6

public static final int KEY_NUM6

ITU-T 定義6キーのキー・コードを示す定数(=54)です。

関連項目:
定数フィールド値

KEY_NUM7

public static final int KEY_NUM7

ITU-T 定義7キーのキー・コードを示す定数(=55)です。

関連項目:
定数フィールド値

KEY_NUM8

public static final int KEY_NUM8

ITU-T 定義8キーのキー・コードを示す定数(=56)です。

関連項目:
定数フィールド値

KEY_NUM9

public static final int KEY_NUM9

ITU-T 定義9キーのキー・コードを示す定数(=57)です。

関連項目:
定数フィールド値

KEY_STAR

public static final int KEY_STAR

ITU-T 定義*キーのキー・コードを示す定数(=42)です。

関連項目:
定数フィールド値

KEY_POUND

public static final int KEY_POUND

ITU-T 定義#キーのキー・コードを示す定数(=35)です。

関連項目:
定数フィールド値
コンストラクタの詳細

Canvas

protected Canvas()
新しい Canvas クラスのオブジェクトを構築します。

メソッドの詳細

getWidth

public int getWidth()
表示可能なエリアの幅 ( ピクセル数 ) を得ます。 値はアプリケーションの実行中は不変で、すべての Canvas クラスは同じ値を持ちます。

戻り値:
表示可能なエリアの幅(単位:ピクセル数)を返します。

getHeight

public int getHeight()
表示可能なエリアの高さ ( ピクセル数 ) を得ます。 値はアプリケーションの実行中は不変で、すべての Canvas クラスは同じ値を持ちます。

戻り値:
表示可能なエリアの高さ(単位:ピクセル数)を返します。

isDoubleBuffered

public boolean isDoubleBuffered()
ダブル・バッファによるグラフィック描画をがインプリメントされているかどうかチェックします。

戻り値:
true ならばダブル・バッファ、false ならばそうではありません。

hasPointerEvents

public boolean hasPointerEvents()
プラットフォームがポインタの押し離しイベントをサポートしているかどうかチェックします。

戻り値:
true ならばポインタ・イベントをサポートしているデバイスです。

hasPointerMotionEvents

public boolean hasPointerMotionEvents()
プラットフォームがポインタ移動イベント(ポインタ・ドラッグ)をサポートしているかどうかをチェックします。 アプリケーションはプラットフォームが移動イベントをサポートしている可能性があるかどうかを確定するためにこのメソッドを用いることができます。

戻り値:
true ならばポインタ移動イベントをサポートしているデバイスです。

hasRepeatEvents

public boolean hasRepeatEvents()
プラットフォームがキーが押されつづけるときにキー・リピート・イベントを生成するかどうかをチェックします。

戻り値:
true ならばリピートイベントをサポートしているデバイスです。

getKeyCode

public int getKeyCode(int gameAction)

ゲーム・アクションに対応する、このデバイスのキー・コードを返します。 実装は、ゲーム・アクションごとに1つの対応するキー・コードを提供します。 このため、指定されたゲーム・アクションに対応する常に有効なキー・コードを返します。

1つのゲーム・アクションは複数のキー・コードに対応している場合があります。 このため、getGameAction(int) メソッドで変換した後に、再度このメソッドでキー・コードに戻した場合、最初のキー・コードとは異なる可能性があります。

キー・コードとゲーム・アクションの間の対応表はアプリケーションの実行中に変わる事はありません。

詳しくはゲーム・アクションを参照してください。

パラメータ:
gameAction - 対象のゲーム・アクションを渡します。
戻り値:
ゲーム・アクションと一致しているキー・コードを返します。
例外:
IllegalArgumentException - もし gameAction が有効なゲーム・アクションでないならば throw します。

getKeyName

public String getKeyName(int keyCode)

指定されたキー・コードに対応する表示用の名前文字列を返します。 返される文字列はデバイスのキーに刻印されている内容あるいは近い内容となります。

このメソッドはユーザーに対して特定のキーを押すことを求めるようなメッセージの生成を行う際に使用します。 例えば MIDlet アプリケーションのキーマッピングをカスタマイズする際に、ユーザーが押したキーがデバイス独自の「START」キーである場合に、「開始する場合は START キー」と言うように表示することができます。

ゲーム・アクションに対応するキーをメッセージに含める場合は、getKeyCode(int) メソッドでゲーム・アクションをキー・コードに変換してからこのメソッドを呼び出します。 例えば、

     getKeyName(getKeyCode(Canvas.UP));

というように記述します。

このメソッドはキー・コードが有効である限り、1つの空ではない文字列を返します。

パラメータ:
keyCode - 要求するキー・コードを渡します。
戻り値:
キー名称の入った文字列を返します。
例外:
IllegalArgumentException - キー・コードが不正だった場合に throw します。

getGameAction

public int getGameAction(int keyCode)

キー・コードをそのデバイス上で定義されたゲーム・アクションへ置き換えます。 そのキー・コードに対応するゲーム・アクションが存在しない場合は 0 を返します。

詳しくはゲーム・アクションを参照してください。

キー・コードとゲーム・アクションの間の対応表はアプリケーションの実行中に変わる事はありません。

パラメータ:
keyCode - 置き換える対象のキー・コードを渡します。
戻り値:
キー・コードと一致しているゲーム・アクションあるいは一致するゲーム・アクションが無い場合は 0 を返します。
例外:
IllegalArgumentException - keyCode が有効なキー・コードでないい場合に throw します。

keyPressed

protected void keyPressed(int keyCode)

キーが押されると実装によって呼び出されます。

キー・コードに対応するゲーム・アクションを確定させる必要がある場合は、getGameAction メソッドを呼び出します。

Canvas クラスはこのメソッドの空の実装を持ちます。 MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。

パラメータ:
keyCode - 押されたキーに対応するキー・コードが渡されます。

keyRepeated

protected void keyRepeated(int keyCode)

キーが押されつづけてキー・リピートが発生する場合に実装によって呼び出されます。

キー・コードに対応するゲーム・アクションを確定させる必要がある場合は、getGameAction メソッドを呼び出すことができます。

Canvas クラスはこのメソッドの空の実装を持ちます。 MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。

パラメータ:
keyCode - キー・リピートが発生したキーのキー・コードが渡されます。
関連項目:
hasRepeatEvents()

keyReleased

protected void keyReleased(int keyCode)

キーが放されると実装によって呼び出されます。

キー・コードに対応するゲーム・アクションを確定させる必要がある場合は、getGameAction メソッドを呼び出すことができます。

Canvas クラスはこのメソッドの空の実装を持ちます。 MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。

パラメータ:
keyCode - 放されたキーに対応するキー・コードが渡されます。

pointerPressed

protected void pointerPressed(int x,
                              int y)

ポインタが押されると実装によって呼び出されます。

デバイスがポインタ・イベントをサポートするかどうかを決定するために hasPointerEvents() メソッドを呼び出すことができます。

Canvas クラスはこのメソッドの空の実装を持ちます。 MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。

パラメータ:
x - ポインタが押された水平位置がキャンバス内の相対位置で渡されます。
y - ポインタが押された垂直位置がキャンバス内の相対位置で渡されます。
関連項目:
hasPointerEvents()

pointerReleased

protected void pointerReleased(int x,
                               int y)

ポインタが放されたときに実装によって呼び出されます。

デバイスがポインタ・イベントをサポートするかどうかを決定するために hasPointerEvents() メソッドを呼び出すことができます。

Canvas クラスはこのメソッドの空の実装を持ちます。 MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。

パラメータ:
x - ポインタが放された水平位置がキャンバス内の相対位置で渡されます。
y - ポインタが放された垂直位置がキャンバス内の相対位置で渡されます。
関連項目:
hasPointerEvents()

pointerDragged

protected void pointerDragged(int x,
                              int y)

ポインタがドラッグされたときに実装によって呼び出されます。

デバイスがポインタ・イベントをサポートするかどうかを決定するために hasPointerEvents() メソッドを呼び出すことができます。

Canvas クラスはこのメソッドの空の実装を持ちます。 MIDlet アプリケーションがこのイベント情報を必要とするならば、このクラスを継承したサブクラスにおいてこのメソッドをオーバーライドして必要な処理を実装します。

パラメータ:
x - ポインタがドラッグされた水平位置がキャンバス内の相対位置で渡されます。
y - ポインタがドラッグされた垂直位置がキャンバス内の相対位置で渡されます。
関連項目:
hasPointerEvents()

repaint

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() メソッドを呼び出すこともできます。

以下の場合には再描画要求は無効となります。

再描画要求を出す矩形領域は、原点座標 (x, y) を左上とする右下へ向かって幅 width、高さ height の座標系で指定します。

パラメータ:
x - 再描画を開始する矩形の開始 X 座標を渡します。
y - 再描画を開始する矩形の開始 Y 座標を渡します。
width - 再描画する矩形の幅を渡します。
height - 再描画する矩形の高さを渡します。
関連項目:
Display.callSerially(Runnable), serviceRepaints()

repaint

public final void repaint()
Canvas 全体の再描画を要求します。 このメソッドの呼び出しは以下の呼び出しと等価です。

repaint(0, 0, getWidth(), getHeight());


serviceRepaints

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)

showNotify

protected void showNotify()

Canvas がディスプレイ上に表示される直前に実装がこのメソッドを呼び出します。 実装はデフォルトの実装として空の実装を提供します。

このメソッドは表示状態が変化するたびに呼び出されます。 このためアプリケーションが明示的にカレントの表示対象を変更した場合以外にも頻繁に呼び出される可能性があります。 詳しくはイベント・デリバリ・メソッドを参照してください。

関連項目:
hideNotify()

hideNotify

protected void hideNotify()

Canvas がディスプレイの表示対象から外れた直後に実装がこのメソッドを呼び出します。 実装はデフォルトの実装として空の実装を提供します。

このメソッドは表示状態が変化するたびに呼び出されます。 このためアプリケーションが明示的にカレントの表示対象を変更した場合以外にも頻繁に呼び出される可能性があります。 詳しくはイベント・デリバリ・メソッドを参照してください。

関連項目:
showNotify()

paint

protected abstract void paint(Graphics g)

Canvas の描画処理を実装するための抽象メソッドです。 アプリケーションは任意のグラフィックを描画する実装を提供しなければなりません。

このメソッドが呼び出されるのは Canvas が可視状態、つまり Displayable クラスから継承した isShown() メソッドが true を返す状態の場合のみです。

実装がこのメソッドを呼び出す際に渡す Graphics オブジェクトには、再描画が必要な領域がクリップ領域として設定されています。 アプリケーションによるこのメソッドの実装はこの領域内の全てのピクセルに対して描画を行わなければなりません。 アプリケーションはクリップ領域内の以前の描画内容およびこのメソッドが呼び出された要因についていかなる仮定を行ってはなりません。 これは、このメソッドを呼び出す要因がアプリケーションによる repaint() メソッドの1回の呼び出しだけではなく複数回の呼び出しをまとめたものである可能性や、実装やシステムによるものである可能性があるためです。 このため、クリップ領域内のピクセルに特別な前提を置くと不適切な描画結果となることがあります。

このメソッドの呼び出し時に渡される Graphics オブジェクトはこのメソッド内においてのみ有効です。 アプリケーションはこのオブジェクトを保存し、このメソッドの外で使用してはなりません。 このような記述をした場合の処理結果は不確定です。

実装はダブル・バッファリングをサポートしている場合があります。 この場合、このメソッドによる描画はこのメソッドの処理が戻るまでディスプレイに描画結果は表示されません。 実装がダブル・バッファをサポートしているか否かは isDoubleBuffered() メソッドによって判定することができます。

Canvas の表示内容は実装によって保持されません。 このため Canvas が非表示になった後、次に表示される際には showNotify() メソッドが呼ばれた直後に Canvas 全体をクリップ領域に設定した Graphics オブジェクトを渡してこのメソッドを呼び出すでしょう。

他のキーやポインタ関係のイベント・デリバリ・メソッドの前にこのメソッドが呼び出されるとは限りません。 このため、できる限りこのメソッドの処理は軽くすべきです。 負荷の高い描画処理を必要とする場合、MIDlet アプリケーションはオフスクリーン・イメージを作成し、それを次回のこのメソッドによる描画することもできます。 呼び出し関係の詳しい説明はイベント・デリバリ・メソッドを参照してください。

アプリケーションのコードは paint() メソッドを呼び出してはなりません。 このメソッドは実装によってのみ呼ばれます。

このメソッドにパラメータに渡される Graphics オブジェクトは次のように設定されています。

パラメータ:
g - Canvas を描画するための Graphics オブジェクトが渡されます。

Unofficial
"CLDC 1.0
+ MIDP 1.0"
API Reference.
(日本語版)

このAPIリファレンスに記載されている内容は"さかきけい"が Sun Microsystems, Inc や Java Community Process が公開している各種公式資料を元に、独自に調査・編集したものであり、Sun Microsystems, Inc や Java Community Process 等とは一切関係ありません。したがってこのAPIリファレンスに関する問い合わせを関係各社等に対して行うことを固く禁じます。
また、記載された内容には既知か否かに関らず誤りが含まれる可能性があり、一切保証はありません。本APIリファレンスを使用した結果、不利益が生じたとしても"さかきけい"は一切の責任を負いません。
許可無く公開/非公開および Internet/Intranet/LAN を問わず他サイトに転載すること、複写および複製すること、ローカルファイル等に保存することを禁じます。


Copyright© 2001-2002,2005-2009 by KEI SAKAKI.
ALL RIGHTS RESERVED.
無断転載を禁じます。

Unofficial "CLDC 1.1 + MIDP 2.0" API Reference はこちらです。