|
Unofficial "CLDC 1.0 + MIDP 1.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object javax.microedition.lcdui.Display
public class Display
このクラスはシステムのディスプレイや入力装置のマネージャー機能を提供します。
デバイスの特性情報の提供や、ディスプレイに表示する対象のオブジェクトの管理を行います。
このクラス以外にデバイス属性を扱うメソッドが Canvas
クラスにも定義されています。
1つの MIDlet に対して1つの Display
オブジェクトが存在します。
そのオブジェクトは getDisplay(javax.microedition.midlet.MIDlet)
メソッドで取得することができます。
アプリケーションは MIDlet
クラスの startApp
メソッドが呼び出されてから同クラスの destroyApp(boolean)
メソッドが呼び出されるまで getDisplay(javax.microedition.midlet.MIDlet)
メソッドを呼び出すことができます。
この間、getDisplay(javax.microedition.midlet.MIDlet)
メソッドの呼び出しによって得られる全てのオブジェクトは同一のオブジェクトです。
一般的なアプリケーションは MIDlet
クラスのメソッドの呼び出しに対して以下のような処理を行います。
startApp()
setCurrent(Displayable)
メソッドに渡すかもしれません。
途中で pauseApp()
メソッドが呼び出された場合、startApp()
メソッドは複数回呼び出されることがあることに注意が必要です。
1度だけ実行したい初期化処理は MIDlet のコンストラクタとして記述すべきです。
pauseApp()
setCurrent(javax.microedition.lcdui.Displayable)
メソッドを呼び出して新たな表示対象を設定すべきです。
destroyApp(boolean)
ディスプレイ装置に表示されるユーザーインタフェース・オブジェクトは Displayable
オブジェクト内に存在します。
アプリケーションはいつでもディスプレイ装置およびユーザーインタフェースを提供する1つのオブジェクトを持つことができます。
表示することができるこのオブジェクトを「カレントの表示対象」と呼びます。
Display
クラスには表示対象を設定する setCurrent(Displayable)
メソッドと設定されている表示対象を取得する getCurrent()
メソッドが用意されています。
アプリケーションは表示対象をコントロールするためにいつでも setCurrent(Displayable)
メソッドを呼び出すことができます。
一般的にアプリケーションはユーザーのアクションに応じて表示対象を切り替えますが、常にそうであるわけではありません。
例えば Alert
の場合、一定時間経過すると表示対象が切り替わります。
アプリケーションの「カレントの表示対象」は物理的なディスプレイ上に描画されないことがあります。 また、キー操作によるユーザーイベント等についても同様です。 これらは同じデバイス上で同時に動作している他の MIDlet アプリケーションの存在によって発生する可能性があります。
アプリケーションが設定したカレントの表示対象がディスプレイにが表示され、ユーザーによる入力デバイスによるイベントがそれに通知される状態を「フォアグラウンド」状態と呼びます。 アプリケーションがフォアグラウンド状態でなければ、ディスプレイや入力デバイスへのアクセスができない状態となり、この状態を「バックグラウンド」状態と呼びます。 デバイスに対して個々の MIDlet アプリケーションを割り当てる方法は MID Profile 仕様外であり、アプリケーション管理ソフトと呼ばれる外部のソフトウェアによってコントロールされます。
上で述べたようなバックグラウンド状態であっても、アプリケーションはカレントの表示対象を設定することができます。
バックグラウンド状態のアプリケーションがフォアグラウンド状態になった時に、カレントの表示対象はディスプレイへ表示されます。
このため、バックグラウンド状態のアプリケーションであってもカレントの表示対象を設定することは重要です。
アプリケーションは実際にカレントの表示対象がディスプレイに表示されるかどうかを Displayable
クラスの isShown()
メソッドで確認することができます。
また、Canvas
の場合、ディスプレイに表示される場合には showNotify()
メソッドを、非表示になる場合には hideNotify()
メソッドが呼び出されます。
それぞれの MIDlet アプリケーションは固有のカレントの表示対象を設定することができます。
つまり、その MIDlet アプリケーションがフォアグラウンド・バックグラウンド状態のいずれであっても getCurrent()
メソッドによってカレントの表示対処を取得することができる、ということです。
例えばフォアグラウンドのアプリケーション A がカレントの表示対象に B を、バックグラウンドのアプリケーション C がカレントの表示対象に D を設定しているとします。
この状態でアプリケーション A が getCurrent()
メソッドを呼び出すと B が、アプリケーション C が getCurrent()
メソッドを呼び出すと D を返します。
さらにこの状態でいずれかの MIDlet アプリケーションが setCurrent(Displayable)
メソッドでカレントの表示対象を変更したとしても、他方の MIDlet アプリケーションには一切影響しません。
getCurrent()
メソッドは null
を返すことがあります。
例えば、MIDlet アプリケーションが setCurrent(javax.microedition.lcdui.Displayable)
メソッドで最初にカレントの表示対象を設定する前に呼び出した場合に返すことがあります。
getCurrent()
メソッドは setCurrent(javax.microedition.lcdui.Displayable)
メソッドによって設定されたことのないオブジェクトを返すことはありません。
通常、フォアグラウンドの MIDlet アプリケーションが設定したカレントの表示対象がディスプレイに表示されています。
しかし特定の状況下において、システムはアプリケーションの表示を妨げるようなスクリーンを表示することがあります。
これらのシステムが表示するスクリーンをシステム・スクリーンと呼びます。
システムが Command
メニューを表示したり、TextField
の文字列をユーザーが編集する場合などにシステム・スクリーンが表示されることがあります。
例えシステム・スクリーンが表示されたとしても、getCurrent()
メソッドはシステム・スクリーンではなく、アプリケーションが設定したカレントの表示対象を返します。
システム・スクリーンによってカレントの表示対象がディスプレイのに表示されない状態の場合、その表示対象の isShown()
メソッドは false
を返します。
システム・スクリーンが Canvas
の上に表示される場合、その Canvas
クラスの hideNotify()
メソッドが呼び出されます。
システム・スクリーンの表示が終了すると showNotify()
メソッドを呼び出し、次に paint(Graphics)
メソッドを呼び出して、ディスプレイの表示内容を回復します。
Command
を発生させるためにユーザーによってシステム・スクリーンが呼び出された場合、showNotify()
メソッドが呼び出した後、登録されている CommandListener
の commandAction(Command, Displayable)
メソッドを呼び出します。
メソッドの概要 | |
---|---|
void |
callSerially(Runnable r)
指定された Runnable オブジェクト r の run() メソッドを、画面の再描画が終了後にそのサイクルの中ですぐに呼び出すように設定します。 |
Displayable |
getCurrent()
現在設定されているカレントの表示対象を返します。 |
static Display |
getDisplay(MIDlet m)
渡された MIDlet アプリケーションに対応する Display オブジェクトを返します。 |
boolean |
isColor()
デバイスがカラー表示をサポートしているか否かを返します。 |
int |
numColors()
デバイスがサポートしている色数あるいは階調を返します。 |
void |
setCurrent(Alert alert,
Displayable nextDisplayable)
指定された Alert をカレントの表示対象とし、その表示終了後に nextDisplayable に指定された表示対象をカレントの表示対象とします。 |
void |
setCurrent(Displayable next)
渡した表示対象をカレントの表示対象としてディスプレイに表示されるように設定します。 |
クラス java.lang.Object から継承されたメソッド |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
メソッドの詳細 |
---|
public static Display getDisplay(MIDlet m)
渡された MIDlet アプリケーションに対応する Display
オブジェクトを返します。
m
- 対象とする MIDlet アプリケーションのオブジェクトを渡します。
Display
オブジェクトを返します。
NullPointerException
- MIDlet アプリケーションに null
を渡すと throw します。public boolean isColor()
デバイスがカラー表示をサポートしているか否かを返します。
true
を、そうでなければ false
を返します。public int numColors()
デバイスがサポートしている色数あるいは階調を返します。
isColor()
メソッドが true
を返す場合は色数、false
を返す場合は階調です。
モノクロディスプレイの場合は 2
を返します。
public Displayable getCurrent()
現在設定されているカレントの表示対象を返します。
MIDlet がバックグラウンドで動作している場合およびシステム・スクリーンが表示されている場合、返されるカレントの表示対象はディスプレイに表示されていない可能性があります。
カレントの表示対象が実際に表示されているかどうかは Displayable
クラスの isShown()
メソッドによって取得することができます。
アプリケーションの実行開始後、初めて setCurrent(javax.microedition.lcdui.Displayable)
メソッドによってカレントの表示対象が設定される以前にこのメソッドを呼び出すと null
を返すことがあります。
public void setCurrent(Displayable next)
渡した表示対象をカレントの表示対象としてディスプレイに表示されるように設定します。
変更した結果、直ちにディスプレイへの表示は変更されないことがあります。
次のイベント・デリバリ・メソッドが呼び出される前に変更できることは保証されていませんが、遅延してイベント・デリバリ・メソッドを呼び出す間に変更されることがあります。
このメソッドは実際にディスプレイの表示が変更される前に直ちに呼び出し元へ戻ります。
この許容される遅延のため、このメソッドの呼び出しの直後に getCurrent()
メソッドの呼び出し結果が必ずしも同じ値を返すとはいえません。
setCurrent(javax.microedition.lcdui.Displayable)
メソッドの呼び出しはキューとして扱われません。
setCurrent(javax.microedition.lcdui.Displayable)
メソッドの呼び出しによって遅延した表示対象はその後の setCurrent(javax.microedition.lcdui.Displayable)
の呼び出しによって上書きされることがあります。
例えば、カレントの表示対象が S1 の時に
d.setCurrent(S2); d.setCurrent(S3);
と記述した場合、結果として S2
をバイパスして S3
が有効となるかもしれません。
MIDlet アプリケーションが最初に起動した時、カレントの表示対象は設定されていません。
アプリケーションの責任において、常にカレントの表示対象を提供し、ユーザーインタフェースを提供しなければなりません。
従って、アプリケーションは初期化の一部として setCurrent(javax.microedition.lcdui.Displayable)
メソッドを呼び出してカレントの表示対象を設定すべきです。
アプリメーションによってはパラメータに null
を渡すことがあるかもしれません。
これには表示対象が無効であることを示す効果はありません。
このためカレントの表示対象は変更されません。
しかし、アプリケーション管理ソフトにとっては MIDlet アプリケーションをバックグラウンドへ移行させることを要求しているヒントとして解釈することもできます。
同様にバックグラウンドのアプリケーションがフォアグラウンドに移行することを要求しているヒントと解釈することもできます。
例えば、
d.setCurrent(d.getCurrent());
と記述しても、通常はアプリケーションがフォアグラウンドに移行することを要求する効果以外は生じないでしょう。 これらのリクエストはヒントとしてのみ扱われます。 また全てのアプリケーション管理ソフトウェアがアプリケーションがこのメソッドを呼び出すことによってリクエストに応じるというわけではありません。
もしも next
に Alert
オブジェクトが指定された場合、Alert
による表示が終了後、以前に設定されていた表示対象がカレントの表示対象に戻されます。
つまり、setCurrent(Alert, getCurrent())
が呼び出されたような結果が得られます。
既にカレントの表示対象が Alert
の場合、結果として例外が throw されることに注意が必要です。
もし、カレントの表示対象が Alert
の時にアプリケーションが setCurrent(javax.microedition.lcdui.Displayable)
メソッドを呼び出すと、Alert
はディスプレイから削除されて、Alert
が設定したタイマー等は全てキャンセルされます。
システム・スクリーンが表示されている最中にアプリケーションが setCurrent(javax.microedition.lcdui.Displayable)
メソッドを呼び出した場合、システム・スクリーンの表示が終了するまでカレントの表示対象の変更は遅延することがあります。
実装は setCurrent(javax.microedition.lcdui.Displayable)
メソッドによる設定を遅延させたとしても、システム・スクリーンの影響を取り消すリクエストのような setCurrent(javax.microedition.lcdui.Displayable)
メソッドの呼び出しを解釈することができます。
next
- カレントの表示対象にするオブジェクトを渡します。public void setCurrent(Alert alert, Displayable nextDisplayable)
指定された Alert
をカレントの表示対象とし、その表示終了後に nextDisplayable
に指定された表示対象をカレントの表示対象とします。
このメソッドの呼び出しは Alert
がタイマーによるものであったとしても即座に呼び出し元へ戻ります。
nextDisplayable
は Alert
あるいは null
であってはなりません。
上記以外の振る舞いは setCurrent(Displayable)
メソッドと同等です。
alert
- 表示する対象の Alert
オブジェクトを渡します。nextDisplayable
- Alert
の次に表示する対象を渡します。
NullPointerException
- alert
が null
の場合に throw します。
IllegalArgumentException
- nextDisplayable
が null
の場合に throw します。Alert
,
getCurrent()
public void callSerially(Runnable r)
指定された Runnable
オブジェクト r
の run()
メソッドを、画面の再描画が終了後にそのサイクルの中ですぐに呼び出すように設定します。
Canvas
クラスのイベント・デリバリで述べているように、カレントの表示対象に設定されている Canvas
上のイベント・デリバリ・メソッドと連続して呼び出されます。
run()
メソッドは callSerially(Runnable)
メソッドの各呼び出しに応じて正確に呼び出されます。
個々の run()
メソッドの呼び出しは callSerially(Runnable)
メソッドに要求された順に行われます。
このメソッドの呼び出し時に未決の修復箇所がディスプレイに存在している場合、カレントの表示対象として設定されている Canvas
オブジェクトの paint(Graphics)
メソッドが呼び出されます。
また、ダブル・バッファリングが有効な場合は run()
メソッドが呼び出される前にバッファスイッチが行われます。
必要なときに run()
メソッドへの呼び出しは行われますが、それらはディスプレイの表示内容の修復サイクル直後に、あるいは次のイベントが通知される前に呼び出すことは保証されません。
このメソッドは任意のスレッドから呼び出すことができます。
run()
メソッドの呼び出しはこのメソッドの呼び出しとは無関係に発生します。
このメソッドは r.run()
メソッドの呼び出しが戻るまで待ちません。
他のコールバックと同様に r.run()
メソッドは迅速に処理を戻さなければなりません。
もし、長時間かかるオペレーションを実行する必要がある場合は r.run()
メソッドをきっかけとして他のスレッドで処理を実行すべきです。
このメソッドは再描画サイクルと組み合わせ、アプリケーションによってアニメーションを表示するために使用することができます。
典型的なアプリケーションでは、フレームの表示終了後に次の描画のための次のフレームを用意し、Canvas
クラスの repaint()
メソッドを呼び出すでしょう。
その後、フレームが実際にディスプレイに表示されるまで、そのアプリケーションは待ちます。
その後、次のフレームのためのセットアップを行います。
次の r.run()
メソッドが呼び出され、前のフレームをディスプレイに表示したとアプリケーションに通知します。
この目的のためにこのメソッドを使用している例を以下に示します。
class Animation extends Canvas implements Runnable { void paint(Graphics g) { ... } // カレントのフレームを描画します。 void startAnimation() { // 最初のフレームを準備します。 repaint(); callSerially(this); } void run() { // 前回の repaint 終了後に呼び出されます。 if ( /* さらにフレームがあるなら */ ) { // 次のフレームを準備します。 repaint(); callSerially(this); } } }
r
- 呼び出したい Runnable
オブジェクトを渡します。
|
Unofficial "CLDC 1.0 + MIDP 1.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |