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

javax.microedition.lcdui
クラス Display

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

public class Display
extends Object

このクラスはシステムのディスプレイや入力装置のマネージャー機能を提供します。 デバイスの特性情報の提供や、ディスプレイに表示する対象のオブジェクトの管理を行います。 このクラス以外にデバイス属性を扱うメソッドが 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 クラスのメソッドの呼び出しに対して以下のような処理を行います。

ディスプレイ装置に表示されるユーザーインタフェース・オブジェクトは 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() メソッドが呼び出した後、登録されている CommandListenercommandAction(Command, Displayable) メソッドを呼び出します。


メソッドの概要
 void callSerially(Runnable r)
          指定された Runnable オブジェクト rrun() メソッドを、画面の再描画が終了後にそのサイクルの中ですぐに呼び出すように設定します。
 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
 

メソッドの詳細

getDisplay

public static Display getDisplay(MIDlet m)

渡された MIDlet アプリケーションに対応する Display オブジェクトを返します。

パラメータ:
m - 対象とする MIDlet アプリケーションのオブジェクトを渡します。
戻り値:
アプリケーションがユーザーインタフェースのために使用することができる Display オブジェクトを返します。
例外:
NullPointerException - MIDlet アプリケーションに null を渡すと throw します。

isColor

public boolean isColor()

デバイスがカラー表示をサポートしているか否かを返します。

戻り値:
カラー表示をサポートしている場合は true を、そうでなければ false を返します。

numColors

public int numColors()

デバイスがサポートしている色数あるいは階調を返します。 isColor() メソッドが true を返す場合は色数、false を返す場合は階調です。 モノクロディスプレイの場合は 2 を返します。

戻り値:
色数あるいは階調を返します。

getCurrent

public Displayable getCurrent()

現在設定されているカレントの表示対象を返します。 MIDlet がバックグラウンドで動作している場合およびシステム・スクリーンが表示されている場合、返されるカレントの表示対象はディスプレイに表示されていない可能性があります。 カレントの表示対象が実際に表示されているかどうかは Displayable クラスの isShown() メソッドによって取得することができます。

アプリケーションの実行開始後、初めて setCurrent(javax.microedition.lcdui.Displayable) メソッドによってカレントの表示対象が設定される以前にこのメソッドを呼び出すと null を返すことがあります。

戻り値:
カレントの表示対象を返します。

setCurrent

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());

と記述しても、通常はアプリケーションがフォアグラウンドに移行することを要求する効果以外は生じないでしょう。 これらのリクエストはヒントとしてのみ扱われます。 また全てのアプリケーション管理ソフトウェアがアプリケーションがこのメソッドを呼び出すことによってリクエストに応じるというわけではありません。

もしも nextAlert オブジェクトが指定された場合、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 - カレントの表示対象にするオブジェクトを渡します。

setCurrent

public void setCurrent(Alert alert,
                       Displayable nextDisplayable)

指定された Alert をカレントの表示対象とし、その表示終了後に nextDisplayable に指定された表示対象をカレントの表示対象とします。 このメソッドの呼び出しは Alert がタイマーによるものであったとしても即座に呼び出し元へ戻ります。 nextDisplayableAlert あるいは null であってはなりません。

上記以外の振る舞いは setCurrent(Displayable) メソッドと同等です。

パラメータ:
alert - 表示する対象の Alert オブジェクトを渡します。
nextDisplayable - Alert の次に表示する対象を渡します。
例外:
NullPointerException - alertnull の場合に throw します。
IllegalArgumentException - nextDisplayablenull の場合に throw します。
関連項目:
Alert, getCurrent()

callSerially

public void callSerially(Runnable r)

指定された Runnable オブジェクト rrun() メソッドを、画面の再描画が終了後にそのサイクルの中ですぐに呼び出すように設定します。 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.
(日本語版)

この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 はこちらです。