A-3 JDK 1.0 の主要なクラスの変数とメソッド
JDK 1.0で提供されているパッケージの
中で特によく利用される重要なクラスについて、
その変数とメソッドの意味を解説します。
Componentクラスは Objectクラスの直接のサブ・クラスで、
ImageObserverインターフェイスをインプリメントします。
java.awtパッケージに含まれます。
Componentクラスは、多くのコンポーネントのクラスのスーパー・クラスとなる
重要なクラスです。Componentクラス自身はオブジェクトを生成しません。
しかし Appletなどのクラスの多くのメソッドは Componentクラスの中で
定義されています。以下に解説するメソッドは、Appletを初めとするすべての
コンポーネントのオブジェクトの中で利用されます。
Componentクラスには publicな変数は存在しません。
しかしオブジェクトのサイズや色などの基本的な性質は、
Componentクラスの内部に記憶される重要なデータです。
それらのデータにアクセスするためには、後述の専用のメソッドを利用します。
Componentクラスのメソッド
Componentクラスには、
引数の区別もすると全部で 80個以上のメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- サイズのコントロールのメソッド
- レイアウトに関連するメソッド
- コンポーネントの状態に関連するメソッド
- 色とフォントのコントロールのメソッド
- グラフィックの表示に関連するメソッド
- Imageの取り扱いに関連するメソッド
- イベント処理に関連するメソッド
- オブジェクトの実装に関連するメソッド
- オブジェクトに関する情報を与えるメソッド
サイズのコントロールのメソッド
- public Dimension size()
- public void resize(int width, int height)
- public void resize(Dimension d)
- public synchronized void reshape(int x, int y, int width, int height)
size() は Componentのオブジェクトのサイズを得るのに、
resize() は Componentのオブジェクトのサイズを設定するのに用います。
Dimensionクラスは、public変数 width と height を持つ単純なクラスです。
したがって Component の横のサイズを利用しようとするなら、
たとえば次のような使い方をすることになります。
Button button = new Button("abc"); // Componentのサブ・クラスのオブジェクト
int w = button.size().width; // サイズを記憶する int型のデータ
resize()メソッドは実際には内部で reshape()メソッドを呼び出します。
reshape()メソッドは Componentの実装であるシステムのツール・キットを
直接呼び出して、
Componentのオブジェクトの
位置(親の内部での相対座標)とサイズの両方を一度に調整します。
reshape()のように Componentのオブジェクトの内部データを直接
設定するメソッドは、複数のスレッドから同時にアクセスされないよう
synchonizedになっています。
resize() は reshape()を呼び出すだけなので、sysnchonizedになる
必要がありません。
レイアウトに関連するメソッド
- public Container getParent()
- public Point location()
- public Rectangle bounds()
- public void move(int x, int y)
- public void layout()
Componentのオブジェクトは、それをレイアウトするための「親」のオブジェクトを
持つのが普通です。親になることができるのは、内部の「子」のレイアウトを
管理する能力を備えた Container のオブジェクトです。
getParent()は、その親のオブジェクトを知るためのメソッドです。
親のオブジェクト内での相対位置を知るには location()メソッドを、
オブジェクト自身が占める領域を知るには bounds() メソッドを利用します。
なお、これらのメソッドは図形を表すクラスのオブジェクトになっています。
Pointは public変数として X座標と x と Y座標 y を持つ単純なクラスです。
Rectangleは public変数として、位置の情報を表す Pointクラスのオブジェクトと、
サイズの情報を表す Dimensionクラスのオブジェクトを持つ単純なクラスです。
Componentのオブジェクトを親のオブジェクトの内部で移動させるには、
move()メソッドを使います。move()は実際には中で reshape()メソッドを
呼び出しています。
layout()は Componentのオブジェクトの内部のレイアウトを実行するメソッドです。
このメソッドは Componentクラスでは特に何も定義されていません。
その内容は Containerクラスで初めて定義されます。
ただし他のメソッド( validate() )から呼び出されるべき存在であることは、
この Componentクラスの中で定義されています。
- public synchronized boolean inside(int x, int y)
- public Component locate(int x, int y)
- public Dimension preferredSize()
- public Dimension minimumSize()
inside()は、与えられた座標が Componentのオブジェクト自身の内部に含まれる
かをチェックするメソッドです。
(座標の原点は Componentのオブジェクト自身の左上端の点です。)
locate()は、与えられた座標に存在する Componentのオブジェクトを
知るためのメソッドです。内部に他のオブジェクトがなければ、自分自身が
返されます。
(やはり座標の原点は Componentのオブジェクト自身の左上端の点です。)
preferredSize()メソッドおよび minimumSize()メソッドは、
オブジェクトの最適なサイズおよび許される最小のサイズを与えます。
主に親のオブジェクトによって利用されます。
コンポーネントの状態に関連するメソッド
- public boolean isValid()
- public void validate()
- public void invalidate()
isValid()メソッドは、
レイアウトの処理が済んでいるかどうかをチェックします。
isValid() の値が true ならば処理は終わっています。
false ならばレイアウトのし直しが必要であることを示します。
サイズなどが変更されて
レイアウトのし直しが必要になった時には validate()メソッドを、
逆に対象から外すには invalidate() メソッドを呼び出します。
- public boolean isVisible()
- public boolean isShowing()
- public synchronized void show()
- public synchronized void hide()
- public void show(boolean cond)
isVisible() と isShowing() は、
画面に表示された状態かをチェックするメソッドです。
isVisible()が親のオブジェクトの上に表示すべきかどうかをチェックするのに対し、
isShowing()は親のオブジェクトを含めて本当に表示されているかをチェックします。
したがって isVisible()が true であっても isShowing() が false である
可能性はあります。
show()メソッドはオブジェクトを表示させ、
hide()メソッドはオブジェクトを非表示の状態にします。
ただし boolean型の引数を持つ場合はに、
show(true) は show()と、show(false)はhide() と同じ意味になります。
show(),hide()の操作の対象となるのは、
isVisible() でチェックされる状態の方です。
hide()で isVisible()の値が false になっても、
オブジェクトがレイアウトされる領域は確保されたままです。
- public boolean isEnabled()
- public synchronized void enable()
- public synchronized void disable()
- public void enable(boolean cond)
isEnabled() は Componentのオブジェクトが操作可能(イベント処理を
受け付ける状態)かどうかをチェックするメソッドです。
enable()メソッドはオブジェクトを操作可能な状態にさせ、
disable()メソッドはオブジェクトをの操作不可能な状態にします。
ただし boolean型の引数を持つ場合はに、
enable(true) は enable()と、enable(false)は disable() と同じ意味になります。
色とフォントのコントロールのメソッド
- public Color getForeground()
- public synchronized void setForeground(Color c)
- public Color getBackground()
- public synchronized void setBackground(Color c)
Componentのオブジェクトの前景色を得るには getForeground()メソッドを、
設定するには setForeground()メソッドを用います。
Componentのオブジェクトの背景色を得るには getBackground()メソッドを、
設定するには setBackground()メソッドを用います。
これらのメソッドでやり取りされるのは、すべて Colorクラスのオブジェクトです。
なお、前景色および背景色の初期値は親のオブジェクトから継承されます。
- public Font getFont()
- public synchronized void setFont(Font f)
- public FontMetrics getFontMetrics(Font f)
Componentのオブジェクトが内部に持つフォントを得るには getFont()メソッドを、
設定するには setFont()メソッドを用います。
これらのメソッドでやり取りされるのは Fontクラスのオブジェクトです。
フォントに対応する FontMetricsクラスのオブジェクトを得るには、
getFontMetrics()メソッドを用います。
このメソッドの対象となるのは Componentのオブジェクトの内部に記憶された
Fontクラスのオブジェクトとは限りません。
FontMetricsクラスのオブジェクトは、必ず Fontクラスのオブジェクトに
付随して生成され、その内容は不変です。
そのため setFontMetrics() のようなメソッドは存在しません。
なお、フォントの初期値は親のオブジェクトから継承されます。
グラフィックの表示に関連するメソッド
- public void paint(Graphics g)
- public void update(Graphics g)
- public void paintAll(Graphics g)
- public void print(Graphics g)
- public void printAll(Graphics g)
- public void repaint()
- public void repaint(long tm)
- public void repaint(int x, int y, int width, int height)
- public void repaint(long tm, int x, int y, int width, int height)
描画処理の内容を定義するメソッドが paint() と update() です。
paint()は Componentのオブジェクトの再描画が必要になった時
(最初に画面に現れる時も含む)に呼び出されます。
update()は repaint()メソッドによって間接的に呼び出されます。
paintAll()は Componentのオブジェクト自身も含め、
内部にある全ての Comonentのオブジェクトの
再描画を呼び出すメソッドです。
厳密に言うと再描画の時に最初に呼び出されるのは、
この paintAll()メソッドです。
paint()メソッドは paintAll()の中から呼び出されます。
print()およびprintAll()は、働きは paint()およびpaintAll()と同じです。
Componentのサブ・クラスの中で図形の表示とテキストの表示を使い分ける
ことを想定して用意されていると思われます。
Componentクラスでのデフォルトの設定は paint()の内容を呼び出すように
なっています。
また JDK 1.0の他のクラスでも print()メソッドを特別に再定義しているもの
はないようです。
paint(), update(), paintAll(), print(), printAll()のメソッドは
明示的に呼び出すことはできません。
引数の Graphicsクラスのオブジェクトは、
これらのメソッドが自動的に呼び出される時に外部から与えられるデータです。
repaint()は描画処理が必要であることをプログラム中で明示的に
要求するためのメソッドです。
repaint()は update()を呼び出すように要求を出します。
repaint() が要求を行っても即座に update()が呼び出されるとは限らない
点に注意してください。引数に「タイム・アウト」の時間を指定することも
可能です。(単位はミリ秒)
また、再描画の処理の対象となる範囲を4つの int型のデータの組で
指定することができます。4つのデータの意味は順に、
描画領域の X座標、Y座標、横のサイズ、縦のサイズです。
- public synchronized ColorModel getColorModel()
- public Graphics getGraphics()
getColorModel()はシステムのカラーモデルの情報を得るためのメソッドです。
JDK 1.0では ColorModelクラスは
ディスプレイのビット・デプスとα値の情報を提供します。
マシンのディスプレイの能力に合わせてきちんと処理を行いたい場合に利用します。
Graphicsクラスのオブジェクトは、
通常のプログラムの内部ではコンストラクタによって生成することはできません。
通常の描画処理の場合は必要なGraphicsクラスのオブジェクトは
外部から与えられます。
getGraphics()は、
何らかの理由で Graphicsクラスのオブジェクトに関する情報を
得たい場合に利用するメソッドです。
Imageの取り扱いに関連するメソッド
- public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h)
- public int checkImage(Image image, ImageObserver observer)
- public int checkImage(Image image, int width, int height, ImageObserver observer)
- public boolean prepareImage(Image image, ImageObserver observer)
- public boolean prepareImage(Image image, int width, int height, ImageObserver observer)
- public Image createImage(ImageProducer producer)
- public Image createImage(int width, int height)
imageUpdate()メソッドは、Imageクラスのオブジェクトから変更の通知を
受け取った時に呼び出されます。
変更があった場合 true、そうでない場合は false が返されます。
デフォルトの設定では、内部で repaint()メソッドを呼び出して
オブジェクトの再表示を行います。
(変更の通知を受け取るためには、ImageObserverとしての Componentの
オブジェクト自身を、Imageのオブジェクトに何らかの方法で登録しておきます。)
checkImage()メソッドはイメージの状態を明示的にチェックするために
利用します。引数に与える ImageObserver のオブジェクトは、
通常は Componentのオブジェクト自身です。
返値の int型の数値は、
その各ビットにイメージの状態を表す情報が含まれています。
各ビットの意味は ImageObserverインターフェイスに定数として定義されています。
(第5章参照)
prepareImage()メソッドは Componentのオブジェクトに固有のイメージデータ
が存在する場合に、その Imageクラスのオブジェクトを用意します。
返値はイメージが用意できたか否かを返します。
createImage()メソッドは新たに Imageのオブジェクトを生成します。
イメージの元となるデータは、
他の ImageProducer のオブジェクトによって提供されるか、
あるいはサイズのみ指定して空のオブジェクトを作ります。
イベント処理に関連するメソッド
- public boolean mouseDown(Event evt, int x, int y)
- public boolean mouseUp(Event evt, int x, int y)
- public boolean mouseEnter(Event evt, int x, int y)
- public boolean mouseExit(Event evt, int x, int y)
- public boolean mouseDrag(Event evt, int x, int y)
- public boolean mouseMove(Event evt, int x, int y)
- public boolean keyDown(Event evt, int key)
- public boolean keyUp(Event evt, int key)
- public boolean action(Event evt, Object obj)
イベント処理のメソッドは、それぞれ該当するイベントが発生した時に
呼び出されます。(第3章参照)
返値が false であればイベントは親のオブジェクトに伝達されます。
action()メソッドはコンポーネントのオブジェクトのクラスによって
特定のイベントに対して呼び出されます。
その識別(イベントのフィルタリング)はコンポーネントの実装のレベルで
行われ、その内容に依存します。
action()メソッドの第2引数はアクションを検知したコンポーネントです。
親のオブジェクトにイベントが伝達されて処理される場合に参照されます。
- public boolean gotFocus(Event evt, Object obj)
- public boolean lostFocus(Event evt, Object obj)
- public void requestFocus()
- public void nextFocus()
キーボード・フォーカスを得た時に gotFocus()メソッドが、
失った時に lostFocus()メソッドが呼び出されます。
キーボード・フォーカスの有無を画面上にきちんと反映させたい場合は、
これらのメソッドの内容が必要になります。
メソッドの第2引数はフォーカスを得た(失った)コンポーネントです。
親のオブジェクトにイベントが伝達されて処理される場合に参照されます。
キーボード・フォーカスのコントロールは外部のサービスにまかせるのが普通です。
どうしても明示的にキーボード・フォーカスを要求する必要がある場合は、
requestFocus()メソッドを呼び出します。
キーボード・フォーカスを複数のコンポーネント間で次々移動できるような
設定がなされている時、
nextFocus()メソッドによって次のコンポーネントに強制的にフォーカスを移動させる
ことができます。
- public void deliverEvent(Event evt)
- public boolean postEvent(Event evt)
- public boolean handleEvent(Event evt)
これらのメソッドは Componentクラスの内部でのイベント処理を実現するため
の一番の基礎を形成するものです。
Componentのオブジェクトにイベントの伝達があると、
最初に呼び出されるメソッドが deliverEvent()です。
deliverEvent() はオブジェクト自身および内部のサブ・コンポーネントに
イベントを伝達する役割を担っています。
Componentクラスのデフォルトの定義では、deleverEvent() は
自分自身にイベントを伝達するため postEvent() を呼び出すのみです。
postEvent() メソッドは handleEvent()メソッドを呼び出します。
handleEvent()の処理が行われない(返値が false)場合には、
postEvent()は親のオブジェクトにイベントを転送します。
handleEvent()はイベントの種類を場合分けし、
それに対応するイベント処理のメソッドのいずれかを呼び出します。
(その返値を自分自身の返値として返す。)
上の仕組みは必要以上に込み入っているように見えるかもしれません。
しかし、このおかげで
Componentのサブ・クラスにおいてより柔軟な処理を保証することができます。
オブジェクトの実装に関連するメソッド
- public ComponentPeer getPeer()
- public Toolkit getToolkit()
- public void addNotify()
- public synchronized void removeNotify()
awtパッケージのコンポーネントは、その実装をシステムのライブラリに
依存しています。あるいはプログラマーが用意した新しい実装を用いる
こともできます。
getPeer()メソッドは、
Componentのオブジェクトの実装を与えるオブジェクトを得るのに用います。
(より正確に言うのなら、実装とのインターフェイスを提供する
オブジェクトを得る。)
getToolkit()メソッドは、コンポーネントの実装を提供するツール・キットの
オブジェクト
(ツール・キットとのインターフェイスを提供するオブジェクト)を与えます。
addNotify() および removeNotify()は、
Componentのオブジェクトに実装のオブジェクトを持たせる、
あるいは実装のオブジェクトを失わせるためのメソッドです。
通常のプログラムでは、これらのメソッドを明示的に操作する必要はないでしょう。
オブジェクトに関する情報を与えるメソッド
- protected String paramString()
- public String toString()
- public void list()
- public void list(PrintStream out)
- public void list(PrintStream out, int indent)
paramString()は現在のComponentのオブジェクトの状態を
単一の文字列の情報で返します。
形式は "x,y,width,height(,invalid)(,hidden)(,disable)"というのが
デフォルトの設定です。
toString()メソッドは、オブジェクトを識別するための Stringクラスの
オブジェクトを返します。
このメソッドはサブ・クラスで必要に応じて再定義されます。
Componentクラスのデフォルトの設定は、「クラス名+paramString()の返値」です。
list()メソッドは、オブジェクトの変数名を指定した出力先(省略時は
標準出力)に表示します。
主としてアプリケーションのデバッグに利用します。
多数のコンポーネントのオブジェクトを階層的にレイアウトした場合のため、
出力時のインデントの深さを指定することもできます。
(実にきめ細かな配慮ですね。)
Containerクラスは Componentクラスの直接のサブ・クラスです。
java.awtパッケージに含まれます。
Containerクラスは、
内部に他のコンポーネントのオブジェクトをレイアウトする機能を提供します。
Containerクラスは他のクラスのスーパー・クラスとなりますが、
自身はオブジェクトを生成しません。
Appletも Containerのサブ・クラスであり、
レイアウトに関する重要なメソッドは Containerクラスの中で定義されています。
Containerクラスには publicな変数は存在しません。
しかしオブジェクトのサイズや色などの基本的な性質は、
Componentクラスから継承し内部に記憶しています。
Containerクラスのメソッド
Containerクラスには、
引数の区別もすると全部で 20個余りのメソッドが定義されています。
そのうちのいくつかは Componentクラスのメソッドを再定義したものです。
(自分自身だけでなく内部のコンポーネントにも操作を行うため)
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- 主としてオブジェクト自身の操作を行うメソッド
- オブジェクト自身と内部のコンポーネントの操作を行うメソッド
- 内部のコンポーネントの管理のためのメソッド
- 内部のコンポーネントのレイアウトを操作するメソッド
- 内部のコンポーネントの描画に関連するメソッド
- レイアウトのオブジェクトに関連するメソッド
- オブジェクトに関する情報を与えるメソッド
主としてオブジェクト自身の操作を行うメソッド
- public synchronized Dimension preferredSize()
- public synchronized Dimension minimumSize()
Containerのオブジェクトの最適のサイズと許される最小のサイズを返します。
これらのメソッドの意味や取り扱いは Componentクラスと同じです。
Containerクラスの場合は、内部のコンポーネントによってサイズが左右されるため
再定義されています。
オブジェクト自身と内部のコンポーネントの操作を行うメソッド
- public void deliverEvent(Event e)
- public synchronized void validate()
- public synchronized void addNotify()
- public synchronized void removeNotify()
これらのメソッドの働きも Componentクラスで定義されたものと基本的には
同じです。ただしオブジェクト自身の他に、内部のコンポーネントに対しても
同じ操作を施します。
deliverEvent() はイベントの発生場所にコンポーネントがあるかどうかチェック
し、もしあればイベントをまずそのコンポーネントに伝達します。
もしイベント発生場所にコンポーネントが存在しなければ、
自分自身にイベントを伝達します。
validate()メソッドは、オブジェクト自身および内部の全てのコンポーネント
に対してレイアウトのし直しが必要な状態に設定します。
addNotify() および removeNotify()メソッドは、オブジェクト自身と内部の
全てのコンポーネントに対して実装のオブジェクトを持たせる、もしくは
取りはずすさせます。
内部のコンポーネントの管理のためのメソッド
- public int countComponents()
- public synchronized Component getComponent(int n)
- public synchronized Component[] getComponents()
countComponents()は内部にあるコンポーネントの個数を返すメソッドです。
getComponent()は内部にあるコンポーネントの N番目のコンポーネント
のオブジェクトを返すメソッドです。
getComponents() は内部にあるコンポーネント全てをコンポーネントの配列
として返すメソッドです。
内部のコンポーネントのレイアウトを操作するメソッド
- public Component add(Component comp)
- public synchronized Component add(Component comp, int pos)
- public synchronized Component add(String name, Component comp)
add()メソッドは、Containerオブジェクトの内部にコンポーネント
を追加します。第2引数に int型の引数を指定すると、
その番号に相当する部分に挿入されます。
第1引数に Stringクラスのデータを指定するのは、
BorderLayoutクラスのように Stringクラスのデータをキーにして
コンポーネントのレイアウトをコントロールするような、少し特殊な場合です。
- public synchronized void remove(Component comp)
- public synchronized void removeAll()
remove()は指定したコンポーネントをContainerのオブジェクトから
取りはずすメソッドです。
removeAll()はContainerのオブジェクト内の全てのコンポーネントを
取りはずすメソッドです。
- public synchronized void layout()
- public Component locate(int x, int y)
- public Insets insets()
layout()メソッドは Containerのオブジェクト内部のレイアウトを実行します。
locate()メソッドは与えられた座標に存在するコンポーネントを返します。
insets()メソッドは Containerの Insetsクラスのオブジェクトを返します。
Insetsはレイアウトの対象となる領域を表す単純なクラスです。
内部のコンポーネントの描画に関連するメソッド
- public void paintComponents(Graphics g)
- public void printComponents(Graphics g)
内部のコンポーネントの全ての paintAll()およびprintAll()メソッドを
呼び出します。(描画は再帰的に行われるわけです。)
レイアウトのオブジェクトに関連するメソッド
- public LayoutManager getLayout()
- public void setLayout(LayoutManager mgr)
Containerのオブジェクトのレイアウトの方針を操作するための
メソッドです。getLayout()は現在使用中のレイアウトのオブジェクトを返します。
setLayout()は Containerのオブジェクトにレイアウトのオブジェクトを設定します。
やりとりされるレイアウトのオブジェクトは、
LayoutManagerインターフェイスをインプリメントしたクラスのオブジェクトで
ある必要があります。通常は awtパッケージに既に用意された5種類のクラスの
いずれかを利用します。(第7章参照)
オブジェクトに関する情報を与えるメソッド
- protected String paramString()
- public void list(PrintStream out, int indent)
これらのメソッドの意味は Componentクラスで定義されたものと同じです。
ただし Containerクラスとして使用頻度の高い情報を与えるように
再定義されています。
paramString()メソッドの場合はレイアウトのポリシーの名前を返します。
list()メソッドはオブジェクト自身の変数名だけではなく、
内部に含まれるコンポーネントの変数名も一段深くインデントして出力します。
Appletクラスは Panelクラスの直接のサブ・クラスです。
独立した java.appletパッケージに含まれます。
Appletは全てのアプレットのクラスのスーパー・クラスとなります。
アプレットとしての重要な機能の多くを提供します。
Panelクラスは Containerクラスの、
Containerクラスは Componentクラスの直接のサブ・クラスです。
したがって Appletクラスは Componentおよび Containerクラスで定義された
メソッドをすべて継承しています。
Appletクラスには publicな変数は存在しません。
しかしオブジェクトのサイズや色などの基本的な性質は、
Componentクラスから継承し内部に記憶しています。
Appletクラスのメソッド
Appletクラスには、
引数の区別もすると全部で 20個余りのメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- アプレットの振る舞いを記述するメソッド
- アプレットの状態を操作するメソッド
- ブラウザとのインターフェイスを提供するメソッド
- 画像を扱うためのメソッド
- 音声を扱うためのメソッド
- オブジェクトに関する情報を与えるメソッド
アプレットの振る舞いを記述するメソッド
- public void init()
- public void start()
- public void stop()
init()メソッドはアプレットが生成された時に自動的に呼び出されます。
このメソッドの中に必要なデータの初期化などの処理を記述します。
start()メソッドはアプレットがブラウザ上に表示された時に自動的に呼び出されます。
アニメーションや音声データの出力などを最初から行いたい場合は、
このメソッドの中に記述します。
init()メソッドが生成時に1回だけ呼び出されるのに対して、
start()メソッドはユーザーの操作に応じて複数回呼び出される可能性があります。
stop()メソッドはアプレットがブラウザ上から消えた時に自動的に呼び出されます。
後始末の処理が必要な時は、このメソッドの中に記述します。
アプレットの状態を操作するメソッド
- public void destroy()
- public boolean isActive()
- public void resize(int width, int height)
- public void resize(Dimension d)
destory()メソッドは明示的にアプレットを消去したい場合に用います。
(destory()によって消去される時にも、stop()メソッドは自動的に呼び出されます。)
isActive()メソッドはアプレットが「生きている」かどうかをチェックします。
ブラウザ上に表示されている通常の状態の場合は isActive()は true を返します。
以上の2つのメソッドを使う機会は、それほど多くはないでしょう。
resize()メソッドの意味は Componentクラスと同じです。ただし、Appletクラスは
ブラウザの側の都合によって自由にサイズを変更できないこともあります。
(ブラウザに「要求する」ことしかできない。)
そのためのチェックを追加するように再定義されています。
ブラウザとのインターフェイスを提供するメソッド
- public String getParameter(String name)
- public URL getDocumentBase()
- public URL getCodeBase()
- public AppletContext getAppletContext()
- public void showStatus(String msg)
- public final void setStub(AppletStub stub)
getParameter()メソッドは指定された名前のパラメータを
HTMLのドキュメントから捜し出し、その値を返します。
返値は Stringクラスのオブジェクトです。
getDocumentBase()は HTMLのドキュメントが置かれたディレクトリの
URLを返します。返値は URLクラスのオブジェクトです。
getCodeBase()はアプレットのバイト・コードが置かれたディレクトリの
URLを返します。返値は URLクラスのオブジェクトです。
getAppletContext()はアプレットが表示されるブラウザから情報を受け取る
ためのメソッドです。返値は AppletContextインターフェイスを
インプリメントし、必要な情報を提供できるブラウザのオブジェクトです。
showStatus()メソッドは、AppletContextインターフェイスをインプリメントした
ブラウザに、アプレットの状態に関するメッセージを表示させます。
( Netscapeの場合なら画面の一番下のメッセージ表示の行に)
setStub()メソッドは、
アプレットに AppletStubクラスのオブジェクトを設定します。
AppletStubは AppletContextと同様に、
アプレットとブラウザとのインターフェイスを実現するためのインターフェイスで
ブラウザにインプリメントされます。
アプレットを配置するための「土台」のようなものだと思えばいいでしょう。
finalで宣言されていることからわかるように、
Appletのサブ・クラスで再定義するべき処理ではありません。
アプレットを利用するために必須の手続きですが、内部で自動的に処理されるため
プログラマーは意識する必要はありません。
画像を扱うためのメソッド
- public Image getImage(URL url)
- public Image getImage(URL url, String name)
getImage()メソッドは指定された URLの画像データを元に、
Imageクラスのオブジェクトを生成します。
(Imageクラスのオブジェクトはコンストラクタによって生成はできません。)
引数はファイルの完全な URL もしくは 特定のディレクトリの URL とそこから
の相対パス名(Stringクラスのオブジェクト)のペアで指定します。
相対パス名を使用する時は、
getDocumentBase()もしくは getCodeBase()メソッドを利用すると便利です。
Image image = getImage( getCodeBase(), "images/image.gif" );
音声を扱うためのメソッド
- public void play(URL url)
- public void play(URL url, String name)
- public AudioClip getAudioClip(URL url)
- public AudioClip getAudioClip(URL url, String name)
play()メソッドは指定された URLの音声データを元に、
音声の再生を一回行います。
引数はファイルの完全な URL もしくは 特定のディレクトリの URL とそこから
の相対パス名(Stringクラスのオブジェクト)のペアで指定します。
getAudioClip()メソッドは指定された URLの音声データを元に、
AudioClipインターフェイスを実装したブラウザのオブジェクトを受け取ります。
引数はファイルの完全な URL もしくは 特定のディレクトリの URL とそこから
の相対パス名(Stringクラスのオブジェクト)のペアで指定します。
AudioClipインターフェイスは、play(), loop(), stop()の3つのメソッドを
提供します。
音声の再生はエンドレスで行われ、好きな時に停止と再開が可能です。
オブジェクトに関する情報を与えるメソッド
- public String getAppletInfo()
- public String[][] getParameterInfo()
getAppletInfo()はアプレットに関する一般的な情報
(作成者、バージョンなど)を返すためのメソッドです。
getParameterInfo()はアプレットのパラメータに関する情報を
返すためのメソッドです。
ただし、いずれのメソッドもデフォルトの設定では nullを返すだけです。
アプレットの作成者がわかりやすいフォーマットで内容を記述しなくてはいけません。
Graphicsクラスは Objectクラスの直接のサブ・クラスです。
java.awtパッケージに含まれます。
Graphicsはグラフィック処理を実現する重要なクラスです。
使用する色やフォントなどの情報を記憶し、
多く図形を描くための「グラフィック関数」を提供します。
(画面に表示される図形そのものを表すクラスではありません。
むしろ、それらをコントロールするためのクラスだと考えてください。)
Graphicsクラスは abstractなクラスです。
グラフィックの処理は、一般にシステムの実装に大きく依存するからです。
したがって Graphicsのオブジェクトを、
プログラムの中でコンストラクタによって生成することはできません。
通常は「外から与えられたオブジェクトを利用する」ことになります。
Graphicsクラスには publicな変数は存在しません。
しかし、使用する色やフォントなどの情報は内部に記憶しています。
これらの変数にアクセスするには後述の専用のメソッドを用います。
Graphicsクラスのメソッド
Graphicsクラスには、
引数の区別もすると全部で 40個余りのメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- 基本図形を描くメソッド
- 文字列やイメージを描くメソッド
- 図形のコピーやクリアを行うメソッド
- 色やフォントなどのデータへのアクセスを行うメソッド
- 座標系の操作のメソッド
- Graphicsのオブジェクト自身を操作するメソッド
基本図形を描くメソッド
- public abstract void drawLine(int x1, int y1, int x2, int y2)
- public void drawRect(int x, int y, int width, int height)
- public abstract void fillRect(int x, int y, int width, int height)
- public abstract void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
- public abstract void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
- public void draw3DRect(int x, int y, int width, int height, boolean raised)
- public void fill3DRect(int x, int y, int width, int height, boolean raised)
- public abstract void drawOval(int x, int y, int width, int height)
- public abstract void fillOval(int x, int y, int width, int height)
- public abstract void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
- public abstract void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)
- public abstract void drawPolygon(int xPoints[], int yPoints[], int nPoints)
- public void drawPolygon(Polygon p)
- public abstract void fillPolygon(int xPoints[], int yPoints[], int nPoints)
- public void fillPolygon(Polygon p)
Graphicsクラスは基本的な図形を描くためのメソッドを提供します。
JDK 1.0 では図形は全て2次元のもので、線分(Line)、長方形(Rect)、
角が丸い長方形(RoundRect)、陰影付きの長方形(3DRect)、楕円(Oval)、
円弧(Arc)、多角形(Polygon)が提供されています。
drawで始まるメソッドは図形の輪郭のみを描き、
fillで始まるメソッドは図形の内部を塗りつぶします。
それぞれの図形ごとにメソッドの引数の意味、注意点をまとめておきましょう。
- Line
線分の両端の座標を与えます。
- Rect
最初の2つの引数は長方形の左上端の座標です。
次の2つの引数は長方形の横幅、高さを与えます。
- RoundRect
最初の2つの引数は長方形の左上端の座標です。
次の2つの引数は長方形の横幅、高さを与えます。
最後の2つの引数はコーナーの丸くする部分の横幅と高さを与えます。
- 3DRect
最初の2つの引数は長方形の左上端の座標です。
次の2つの引数は長方形の横幅、高さを与えます。
最後の引数は陰影の付け方をコントロールします。
true ならば長方形は「飛び出して」見え、
false ならば長方形は「へこんで」見えます。
陰影に対応する色は自動的に調整されます。
- Oval
最初の2つの引数は楕円を取り囲む長方形の左上端の座標です。
次の2つの引数は楕円を取り囲む長方形の横幅、高さを与えます。
中心の座標や半径を与えるわけではないことに注意してください。
- Arc
最初の2つの引数は円弧を取り囲む長方形の左上端の座標です。
次の2つの引数は円弧を取り囲む長方形の横幅、高さを与えます。
中心の座標や半径を与えるわけではないことに注意してください。
最後の2つの引数は円弧を描き始める角度と描く角度の量を
与えます。単位は度です。
したがって最後の引数に 360 を与えれば常に完全な円になります。
- Polygon
引数の指定法は2通りあります。
1つは、多角形の各頂点の X座標の値の配列と Y座標の値の配列
および点の個数を直接指定する方法です。
あるいは Polygonクラスのオブジェクトを与えることもできます。
Polygonクラスは 各頂点の X座標の値の配列と Y座標の値の配列
および点の個数を public変数に持つ単純なクラスです。
引数の与え方に多少クセがあるように感じるでしょう。
特に Arc や Polygonなど、あまりスマートではありません。
これは Xlib のグラフィック関数のルールを引き継いでいるせいです。
「ベストの記法ではないが従来のものに合わせる」という方針なのでしょう。
文字列やイメージを描くメソッド
- public abstract void drawString(String str, int x, int y)
- public void drawChars(char data[], int offset, int length, int x, int y)
- public void drawBytes(byte data[], int offset, int length, int x, int y)
- public abstract boolean drawImage(Image img, int x, int y, ImageObserver observer)
- public abstract boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
- public abstract boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer)
- public abstract boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer)
文字列を描くメソッドとして drawString(), drawChars(), drawBytes()があります。
drawChars()もdrawBytes()も文字のデータを Stringクラスのオブジェクトに
変換して最終的には drawString()を呼び出します。
drawChars()とdrawBytes()の第2および第3引数は、
それぞれの配列のデータの何番目からスタートし、
何文字分のデータを表示したいかを指定します。
drawString()の最後の2つの引数は文字列を描き始める点の座標です。
文字列の場合はフォントのベースラインの左端の点です。
他の基本図形のように左上端の点ではないので注意してください。
Imageのオブジェクトを表示させるメソッドが drawImage()です。
drawImage()には以下のデータが必須です。
描きたい Imageのオブジェクト、イメージの左上端の X座標と Y座標、
ImageObserverのオブジェクト(通常はアプレット自身)の4つです。
この他に、表示されるイメージの横幅と高さおよび背景色を指定することもできます。
サイズの値は表示したいサイズで、
イメージ自身のサイズと一致する必要はありません。
イメージは自動的に拡大・縮小されて描かれます。
背景色の指定が有効になるのは、
イメージが「背景の透明化」の処理を受けている場合のみです。
図形のコピーやクリアを行うメソッド
- public abstract void clearRect(int x, int y, int width, int height)
- public abstract void copyArea(int x, int y, int width, int height, int dx, int dy)
clearRect()メソッドは、
指定された長方形の領域のグラフィックの内容をクリアします。
copyArea()メソッドは、最初の4つの引数で指定された長方形の領域の
グラフィックの内容を記憶し、最後の2つの引数で指定された場所にコピーします。
色やフォントなどのデータへのアクセスを行うメソッド
- public abstract Font getFont()
- public abstract void setFont(Font font)
- public FontMetrics getFontMetrics()
- public abstract FontMetrics getFontMetrics(Font f)
Graphicsのオブジェクトが現在使用しているフォントを得るには
getFont()メソッドを、設定するには setFont()メソッドを用います。
やり取りされるのは Fontクラスのオブジェクトです。
FontMetricsのオブジェクトを得るためのメソッドが getFontMetrics()です。
引数に Fontのオブジェクトを与えますが、省略すると Graphicsが現在使用
しているフォントに対応する FontMetricsのオブジェクトが返されます。
- public abstract Color getColor()
- public abstract void setColor(Color c)
- public abstract void setXORMode(Color c1)
- public abstract void setPaintMode()
Graphicsが現在使用中の色を得るには getColor()メソッドを、
設定するには setColor()メソッドを用います。やり取りされるのは
Colorクラスのオブジェクトです。
基本図形や文字列は、この Colorのオブジェクトを利用して描かれます。
図形を描く時に、その下に既にある図形との重なりをコントロールしたい
場合もあります。このような細かい操作に対して JDK 1.0はまだ十分な
機能を提供していません。
今のところ setPaintMode() と setXORMode()という2つのメソッドを利用できます。
setXORMode()メソッドは描画のモードを変更して、
指定された色と背景のピクセル値のビットごとの
排他論理和をとって描画します。
2度繰り返して描画すると背景の状態が復活するので、
ラバー・バンドなどの描画に活用できます。
setPaintMode()メソッドは通常の上書きモードの設定に戻します。
座標系の操作のメソッド
- public abstract void translate(int x, int y)
- public abstract void clipRect(int x, int y, int width, int height)
- public abstract Rectangle getClipRect()
translate()メソッドは、指定された位置に座標の原点を移動します。
clipRect()メソッドは、指定された長方形の領域のみを描画の対象に限定します。
いずれのメソッドもグラフィック処理を直接行うのではなく、
その後に呼び出されるグラフィック命令に影響を与えるためのものです。
また、内部のコンポーネントの描画を実行する場合にもしばしば利用されます。
現在のクリップされた領域を知るためには getClipRect()メソッドを用います。
Graphicsのオブジェクト自身を操作するメソッド
- public abstract Graphics create()
- public Graphics create(int x, int y, int width, int height)
- public abstract void dispose()
- public void finalize()
- public String toString()
create()メソッドは、Graphicsのオブジェクトのコピーを生成します。
create()という名前が付いていますが、全く新しく Graphicsのオブジェクトを
生成するわけではありません。
通常は Graphicsのオブジェクトは1つあれば十分ですが、
場合によっては複数の Graphicsのオブジェクトを利用することがあります。
例として、複数の色をひんぱんに切り換えて描画する場合、
複数のサブ・コンポーネントの描画をランダムに繰り返すような場合が
考えられます。これらの場合、色や座標の情報を描画ごとに再設定し直して
から描画するよりも、複数の Graphicsのオブジェクトを用いた方が
効率が良くなることもあります。
create()メソッドに新しい原点の位置と有効な領域の範囲を引数として与える
こともできます。
dispose()およびfinaze()メソッドは Graphicsのオブジェクトを
明示的に消去します。JDK 1.0 では両者の働きは全く同一です。
toString()は Graphicsのオブジェクトの情報を Stringクラスのオブジェクトと
して返します。返値には現在使用中の色およびフォントの情報が含まれています。
Imageクラスは Objectクラスの直接のサブ・クラスです。
java.awtパッケージに含まれます。
Imageは画面に表示される絵や写真などの画像を表すクラスです。
Imageクラスの変数
Imageクラスの publicな変数は次の1つです。
- public final static Object UndefinedProperty
このオブジェクトは、
イメージに指定したプロパティが定義されていないことを表します。
下記の getProperty()メソッドの返値として利用されます。
Imageクラスのメソッド
Imageは抽象クラスです。その実装はシステムに大きく依存します。
全部で 6個のメソッドが定義されています。
- public abstract int getWidth(ImageObserver observer)
- public abstract int getHeight(ImageObserver observer)
- public abstract ImageProducer getSource()
- public abstract Graphics getGraphics()
- public abstract Object getProperty(String name, ImageObserver observer)
- public abstract void flush()
getWidth() と getHeight() はイメージのサイズを調べるメソッドです。
並列して実行されている読み込み処理によって変更が生じた時に
通知を受け取ることができるように、
ImageObserver のオブジェクト(たとえばアプレット自身)を
引数に与える必要があります。
getSource() および getGraphics() メソッドは、イメージのデータに
フィルター処理を施す場合に利用されます。
(画面に表示されたイメージを操作するメソッドではありません。)
getProperty() メソッドは、指定したプロパティ名に対応する情報を返します。
flush()メソッドは、イメージの内容をいったんクリアし再読み込みを実行します。
Colorクラスは Objectクラスの直接のサブ・クラスです。
java.awtパッケージに含まれます。
Colorは色のデータを表すクラスです。
RGBカラーのデータを内部に記憶する他、
それらのデータを操作するメソッドを提供します。
グラフィックスの操作には欠かせません。
Colorクラスには publicな変数として利用頻度が高い原色のデータが
13色分用意されています。
(これらもまた Colorクラスのオブジェクトです。)
全て staticな変数なのでコンストラクタによって
オブジェクトを生成しなくても利用することができます。
これら以外には publicな変数はありません。
Colorクラスの変数
- public final static Color white
- public final static Color lightGray
- public final static Color gray
- public final static Color darkGray
- public final static Color black
- public final static Color red
- public final static Color pink
- public final static Color orange
- public final static Color yellow
- public final static Color green
- public final static Color magenta
- public final static Color cyan
- public final static Color blue
一部の色の名前は、あまりなじみがないかもしれません。
cyanは水色です。magentaは原色のピンクです。
pinkはむしろ淡い肌色に近い色を与えます。
Colorクラスのメソッド
Colorクラスには、
引数の区別もすると全部で約 20個のコンストラクタとメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
Colorのオブジェクト内部のデータはいつでも参照できますが、
Colorのオブジェクト内部のデータをダイナミックに変更することは
できません。色を変更するためには新しい Colorのオブジェクト
を生成する必要があります。
- コンストラクタ
- 色の情報を取り出すためのメソッド
- RGB情報と HSB情報との変換のメソッド
- Colorのオブジェクト自体の情報を与えるメソッド
コンストラクタ
- public Color(int r, int g, int b)
- public Color(float r, float g, float b)
- public Color(int rgb)
Colorクラスには3種類のコンストラクタが用意されています。
いずれも RGBのデータを引数に与えます。
データの形式として RGBの3個のデータを
0 から 255 までの int型のデータで、
0.0 から 1.0 までの float型のデータで、
8ビットずつ計 24ビットの int型のデータ1つで与えることができます。
(上位ビットから red,green,blueの順に並ぶ)
色の情報を取り出すためのメソッド
- public int getRed()
- public int getGreen()
- public int getBlue()
- public int getRGB()
これらは RGBのデータそのものを取り出す最も基本的なメソッドです。
getRGB()の返値は 8ビットごとの計 24ビットの int型のデータです。
- public static Color getColor(String num)
- public static Color getColor(String num, Color v)
- public static Color getColor(String num, int v)
getColor()メソッドはプロパティに登録されたカラー情報を
基にして Color のオブジェクトを生成します。
第1引数はプロパティの番号を表す Stringクラスのオブジェクトです。
該当するプロパティが登録されていない場合には、第2引数のデータを
基にして Color のオブジェクトが返されます。
- public Color brighter()
- public Color darker()
これらのメソッドは Colorのオブジェクトの色を元にして、
ハイライトおよび陰に相当する色を返します。
RGB情報と HSB情報との変換のメソッド
- public static float[] RGBtoHSB(int r, int g, int b, float hsbvals[])
- public static int HSBtoRGB(float hue, float saturation, float brightness)
- public static Color getHSBColor(float h, float s, float b)
HSB情報とは、色相(hue)、彩度(saturation)、明度(brightness)の三要素の
ことです。RGBtoHSB()メソッドは与えられた RGB情報を
HSB情報に変換して返します。返値は float型の配列です。
引数の最後の配列の内容は特に指定する必要はありません。nullを与えてください。
HSBtoRGB()および getHSBColor()メソッドは、
与えられた HSB情報を RGB情報に変換します。
返値は RGBの情報を 24ビットにまとめた int型の数値か、
Colorのオブジェクトになります。
以上の3つのメソッドは staticなので、Colorのオブジェクトを生成しなくても
利用することができます。
Colorのオブジェクト自体の情報を与えるメソッド
- public int hashCode()
- public boolean equals(Object obj)
- public String toString()
hashCode()メソッドは 24ビットで表現した RGBデータの int型の値を返します。
(働きは getRGB()メソッドと同じです。)
equals()メソッドは、与えられた他の色と一致するかをチェックします。
toString()メソッドは、RGBの情報を Stringクラスのオブジェクトとして返します。
Fontクラスは Objectクラスの直接のサブ・クラスです。
java.awtパッケージに含まれます。
Fontクラスのオブジェクトは、個々のフォントのデータおよびその操作のメソッド
を提供します。
Fontクラスの変数
Fontクラスには次の3つの重要な変数が存在します。
これらによってフォントの種類の識別が行われます。
これらの変数の値を Fontのオブジェクトが生成する時に与えなければ
いけません。値を調べるには専用のメソッドを用います。
- protected String name
- protected int size
- protected int style
nameはフォントのファミリ名です。"TimesRoman"のように文字列で与えます。
size はフォントのサイズをポイント値を int型の数値で与えます。
styleはフォントのスタイルで Fontクラスで定義された
以下の int型の定数値を用いて与えます。
- public final static int PLAIN
- public final static int BOLD
- public final static int ITALIC
これらはビット和を用いた指定ができます。
ただし独自の意味を持つのは BOLD | ITALIC のみです。
PLAIN | BOLD は BOLD と同じ、PLAIN | ITALIC は ITALIC と同じです。
(PLAIN の値は 0 だと考えればよい。)
Fontクラスのメソッド
Fontクラスには、
引数の区別もすると全部で 10個余りのメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- コンストラクタ
- フォントを生成する staticなメソッド
- オブジェクト内のフォントの情報を調べるメソッド
- オブジェクト自身に関する情報を調べるメソッド
コンストラクタ
- public Font(String name, int style, int size)
Fontクラスのコンストラクタは、この1種類のみです。
3つの基本データの全てを与える必要があります。
フォントを生成する staticなメソッド
- public static Font getFont(String num)
- public static Font getFont(String num, Font font)
getFont()メソッドは
プロパティに登録されているフォントの情報
を基にして新しいFontのオブジェクトを生成します。
第1引数はプロパティの番号を表す Stringクラスのオブジェクトです。
プロパティに登録がない場合は第2引数のオブジェクトが返されます。
オブジェクト内のフォントの情報を調べるメソッド
- public String getName()
- public String getFamily()
- public int getSize()
- public int getStyle()
- public boolean isPlain()
- public boolean isBold()
- public boolean isItalic()
これらのメソッドは、オブジェクト生成時に指定された
フォントの情報を返します。
getName()の返値は、与えられた Stringクラスのオブジェクトそのものです。
getFamily()の返値は、それを元にシステム内部で利用される
ファミリ名に変換したものです。
スタイルの情報は
利用しやすいように boolean型のチェックも提供されています。
オブジェクト自身に関する情報を調べるメソッド
- public boolean equals(Object obj)
- public int hashCode()
- public String toString()
equals()メソッドは、オブジェクトが引数に与えられたものと同一の
フォントであるかをチェックします。
hashCode()メソッドは、name, style, sizeの3つの情報を単一の int型の
データに変換し、その値を返します。
toString()メソッドは、name, style, sizeの3つの情報を Stringクラスの
オブジェクトとして返します。
FontMetricsクラスはObjectクラスの直接のサブ・クラスです。
java.awtパッケージに含まれます。
FontMetricsはフォントの個々の文字のサイズや文字列の画面上での
サイズなどを計算するための専用のクラスです。
FontMetricsのオブジェクトは、Fontのオブジェクトが生成される時に
同時に用意されます。
コンストラクタによって独立したデータとして生成することはできません。
Fontクラスには publicな変数は存在しません。
対応するFontのオブジェクトを内部に記憶していますが、
通常は内部の処理で用いられるだけです。
FontMetricsクラスのメソッド
FontMetricsクラスには、
全部で十数個のメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- フォント全体に関するサイズの情報を調べるメソッド
- 個々の文字のサイズを調べるメソッド
- 文字列のサイズを調べるメソッド
- オブジェクト自身及びフォントの情報に関するメソッド
フォント全体に関するサイズの情報を調べるメソッド
- public int getAscent()
- public int getMaxAscent()
- public int getDescent()
- public int getMaxDescent()
- public int getMaxAdvance()
- public int getLeading()
- public int getHeight()
getAscent()メソッドは、フォントのベースラインから上に向けて計った
標準の縦のサイズを返します。
getMaxAscent()は全ての文字に対するその最大値を返します。
getDescent()メソッドは、フォントのベースラインから下に向けて計った
標準の縦のサイズを返します。
getMaxDescent()は全ての文字に対するその最大値を返します。
getMaxAdvance()メソッドは、文字と文字との間隔の最大値を返します。
getLeading()メソッドは、行と行との間隔の値を返します。
getHeight()メソッドは行の縦のサイズを返します。
(getAscent() と getDescent() と getLeanding() の和)
個々の文字のサイズを調べるメソッド
- public int charWidth(int ch)
- public int charWidth(char ch)
- public int[] getWidths()
charWidth()は指定された文字の横幅のサイズが、
現実には画面上で何ポイントになるかを返します。
getWidths()は 0 から 255 までのコードに対応する全ての文字の
画面上でのポイント数を配列として返します。
文字列のサイズを調べるメソッド
- public int stringWidth(String str)
- public int charsWidth(char data[], int off, int len)
- public int bytesWidth(byte data[], int off, int len)
これらのメソッドは、対応するフォントで与えられた文字列を
描画する場合に、画面上の実際の横幅のサイズをポイント数で返します。
文字列のデータが charまたはbyteの配列の場合、
第2引数が文字列として利用したい先頭の文字のインデックスを、
第3引数が文字列の文字数を表します。
オブジェクト自身及びフォントの情報を得るメソッド
- public Font getFont()
- public String toString()
getFont() は FontMetrics のオブジェクトに対応する Fontのオブジェクトを
返します。
toString()メソッドは、フォントと文字のサイズに関する情報を
Stringクラスのオブジェクトとして返します。
Eventクラスは Objectクラスの直接のサブ・クラスです。
java.awtパッケージに含まれます。
Eventはイベント情報を記憶するためのクラスです。
Eventクラスの変数
Eventクラスにはイベントの種々の情報を記憶するため、
多数の publicな変数が用意されています。
イベントの種類ごとに以下の項目のようにグループ分けして解説します。
- Eventの情報を記憶する変数
- Eventの種類を表す定数
- 個々のキーを表す定数
- キーの修飾を表す定数
Eventの情報を記憶する変数
- public Object target
- public long when
- public int id
- public int x
- public int y
- public int key
- public int modifiers
- public int clickCount
- public Object arg
- public Event evt
イベントに関する情報は上記の 10個の変数に記憶されます。
targetはイベントが発生したオブジェクトです。
when はイベントのタイム・スタンプです(ミリ秒単位)。
id はイベントの種類を記憶するための変数です。イベントの種類の識別には
後述の定数値を利用します。
x および y はイベントが発生した座標です。
key はキーのコードです。(キーボード・イベントの場合のみ意味を持ちます。)
modifiers はキーの修飾状態を表す変数です。
各ビットに、シフト、コントロール、メタ、アルト・キーが押されているか
どうかを独立に記憶します。状態を取り出すには
後述のマスクの定数を利用するか、専用のメソッドを利用します。
(キーボード・イベント以外の処理でも利用されます。)
clickCount はマウスのクリックの回数を記憶します。
この値が2ならばダブル・クリックです。
マウス・クリック以外の場合は値は 0です。
arg は不定型のデータをイベントに渡す時に利用されます。
特別なオブジェクトをあらかじめ用意しておき、
Eventのオブジェクトを生成する時に引数として渡すことが可能です。
evt は別の Event のオブジェクトへのリンクを提供します。
イベントの系列をリスト構造として取り扱いたい場合に利用します。
arg と evt は Eventのオブジェクトに常に必要なデータというわけではありません。
Eventの種類を表す定数
- public final static int MOUSE_DOWN
- public final static int MOUSE_UP
- public final static int MOUSE_MOVE
- public final static int MOUSE_ENTER
- public final static int MOUSE_EXIT
- public final static int MOUSE_DRAG
- public final static int KEY_PRESS
- public final static int KEY_RELEASE
- public final static int KEY_ACTION
- public final static int KEY_ACTION_RELEASE
- public final static int GOT_FOCUS
- public final static int LOST_FOCUS
- public final static int ACTION_EVENT
- public final static int LIST_SELECT
- public final static int SCROLL_LINE_UP
- public final static int SCROLL_LINE_DOWN
- public final static int SCROLL_PAGE_UP
- public final static int SCROLL_PAGE_DOWN
- public final static int SCROLL_ABSOLUTE
- public final static int LOAD_FILE
- public final static int SAVE_FILE
- public final static int WINDOW_DESTROY
- public final static int WINDOW_EXPOSE
- public final static int WINDOW_ICONIFY
- public final static int WINDOW_DEICONIFY
- public final static int WINDOW_MOVED
イベントの種類は変数 id に記憶されます。
その値の識別には上に定義された定数を用います。
個々のキーを表す定数
- public final static int HOME
- public final static int END
- public final static int PGUP
- public final static int PGDN
- public final static int UP
- public final static int DOWN
- public final static int LEFT
- public final static int RIGHT
- public final static int F1
- public final static int F2
- public final static int F3
- public final static int F4
- public final static int F5
- public final static int F6
- public final static int F7
- public final static int F8
- public final static int F9
- public final static int F10
- public final static int F11
- public final static int F12
キーの情報は変数 key の値に記憶されますが、
キーボードのキーのうちのいくつかは、1バイトのコードには対応していません。
これらの定数は、そうした特殊キー用に定義されたものです。
カーソル移動やファンクション・キーの識別には、これらの定数を用います。
BackSpace や Escapeなどのキー、
あるいは Ctrl+C などの入力は対応するアスキー・コードの値で識別されます。
キーの修飾を表す定数
- public final static int SHIFT_MASK
- public final static int CTRL_MASK
- public final static int META_MASK
- public final static int ALT_MASK
これらの定数値は、変数 modifiers の値から
キーの修飾の状態を得るために用います。
Eventクラスのメソッド
Eventクラスには、
引数の区別もすると3個のコンストラクタと6個のメソッド定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- コンストラクタ
- キーの修飾に関するメソッド
- オブジェクト自身に関するメソッド
コンストラクタ
- public Event(Object target, long when, int id, int x, int y, int key, int modifiers)
- public Event(Object target, long when, int id, int x, int y, int key, int modifiers, Object arg)
- public Event(Object target, int id, Object arg)
通常のプログラムでは Eventのオブジェクトを内部で生成することはなく、
外部から与えられたものを利用する場合がほとんどです。
しかし特殊なケースとしてユーザーの操作を擬似的に再現したり、
与えられたイベント情報を元に新しいイベント情報を生成し、
それを他のオブジェクトに転送することはあり得ます。
そのような場合は上記のコンストラクタを利用します。
主要な変数の値は引数で指定することができます。
それぞれの意味は上述の変数の解説を参照してください。
キーの修飾に関するメソッド
- public boolean shiftDown()
- public boolean controlDown()
- public boolean metaDown()
これらのメソッドは、
イベント発生時にシフト・キー、コントロール・キー、メタ・キーの修飾キーが
押されていたかをチェックします。
これらのメソッドは、キーボード・イベントの処理の中では利用する必要はありません。
むしろマウス・イベントの処理の中で必要になります。
(シフト・キーを押しながらのドラッグの処理などのため)
オブジェクト自身に関するメソッド
- public void translate(int x, int y)
- protected String paramString()
- public String toString()
translate()メソッドはオブジェクトの座標の情報を相対移動します。
(原点を与えられた点に移動する。)
paramString()およびtoString()メソッドはイベントの
座標とキーに関する情報を Stringクラスのオブジェクトとして返します。
(デバッグの時に便利です。)
Stringクラスは Objectクラスの直接のサブ・クラスです。
java.langパッケージに含まれます。
Stringは文字列を表すクラスです。
単なる文字の配列ではなく文字列を操作するための基本的なメソッドも提供します。
Stringクラスには publicな変数は存在しません。
Stringクラスのデータから特定の文字や文字配列のデータを取り出すには、
後述の専用のメソッドを用います。
Stringクラスのメソッド
Stringクラスには、
引数の区別もすると 7個のコンストラクタと 40個余りのメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- コンストラクタ
- 文字の情報を取り出すメソッド
- 他の型のデータをStringのオブジェクトに変換するメソッド
- 文字列の長さと比較のメソッド
- 文字列内の検索のメソッド
- 文字列内の置換のメソッド
- 文字列の連結と分解のメソッド
- オブジェクト自身の情報を取り出すためのメソッド
コンストラクタ
- public String()
- public String(String value)
- public String(StringBuffer buffer)
- public String(char value[])
- public String(char value[], int offset, int length)
- public String(byte ascii[], int hibyte)
- public String(byte ascii[], int hibyte, int offset, int length)
Stringのオブジェクトは、StringおよびStringBufferのオブジェクト、
char型の配列、byte型の配列を元に、生成することができます。
配列を与える場合は開始のインデックスと文字数を与えて、
配列の一部分を利用することもできます。
byte型のデータを元にする場合は、
共通する上位のバイトの値を第2引数に指定します。
char型の配列から String型のデータを生成する場合には、
その配列が privateなデータとしてそのまま利用されます。
ただし元の配列になんらかの変更が生じた場合には、
配列の内容はその時点でコピーされ Stringのオブジェクトの内容には
影響しません。
なお Stringクラスのオブジェクトは非常にしばしば使用されるため、
特別に引用符≪ " " ≫による生成も可能になっています。
以下に示す Stringオブジェクト生成の例は、いずれも同じ意味です。
String str1 = new String("ABCDEFG");
String str2 = "ABCDEFG";
int型などの他の型のデータを元に Stringのオブジェクトを生成するには、
後述の staticなメソッド valueOf()が利用できます。
文字の情報を取り出すメソッド
- public char charAt(int index)
- public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
- public void getBytes(int srcBegin, int srcEnd, byte dst[], int dstBegin)
- public char[] toCharArray()
- public String substring(int beginIndex)
- public String substring(int beginIndex, int endIndex)
charAt()メソッドは、指定したインデックスの位置にある文字の値を返します。
getChars()メソッドは、指定した範囲の文字列のデータを、用意した
char型の配列の内部に格納します。
第4引数は配列の格納先の先頭のインデックスです。
getBytes()メソッドは、指定した範囲の文字列のデータを、用意した
byte型の配列の内部に格納します。
第4引数は配列の格納先の先頭のインデックスです。
toCharArray()メソッドは文字列全体を新しい char型の配列にコピーします。
このメソッドは新しい配列を自動的に生成します。
substring()メソッドは、Stringのオブジェクト内の
指定された範囲の区間を新しい Stringオブジェクトとして返します。
(ただしオブジェクト全体を範囲に指定した場合は、
新しいオブジェクトの生成は行わず自分自身を返します。)
他の型のデータをStringのオブジェクトに変換するメソッド
- public static String valueOf(boolean b)
- public static String valueOf(char c)
- public static String valueOf(int i)
- public static String valueOf(long l)
- public static String valueOf(float f)
- public static String valueOf(double d)
- public static String valueOf(char data[])
- public static String valueOf(char data[], int offset, int count)
- public static String valueOf(Object obj)
- public static String copyValueOf(char data[])
- public static String copyValueOf(char data[], int offset, int count)
valueOf()メソッドは、与えられた型のデータを Stringのオブジェクトに
変換して返します。staticなメソッドです。
なお、記号≪ + ≫は Stringのオブジェクトと原始型のデータを
連結して結果を新しい Stringのオブジェクトとします。
データの値が文字列の一部として用いられる場合には、valueOf()メソッドを
明示的に使わなくてもかまいません。
以下に示す Stringオブジェクト生成の例は、いずれも同じ意味です。
int x = 100;
String str1 = "x=" + String.valueOf(x);
String str2 = "x=" + x;
厳密に言うと《 + 》演算子は StringBufferクラスの appendメソッドです。
しかし、上の例のように見かけ上は Stringクラスの演算子として
考えてかまいません。
valueOf()に char型の配列を与えた場合には、
データとして利用する範囲を、先頭のインデックス及び文字数を引数に与えて
指定することができます。
char型の配列から String型のデータを生成する場合には、
その配列が privateなデータとしてそのまま利用されます。
ただし元の配列になんらかの変更が生じた場合には、
配列の内容はその時点でコピーされ、Stringのオブジェクトの内容には
影響しません。
String.valueOf(char[])は new String(char[])と全く同じです。
Stringのオブジェクトを生成する時に最初から char型の配列を
コピーするように明示的な指定をする場合には、copyValueOf()メソッドを
利用します。いずれのメソッドによって生成されたオブジェクトも
見かけの振る舞いは同じです。
(違いが生じるとしたら、たとえば非常に長いテキストの内容を
読み取り専用で利用するようなケースでしょう。)
valueOf()メソッドには、
任意のクラスのオブジェクトを引数に与えることができます。
結果は各クラスで定義された toString()メソッドが呼ばれた場合と同じです。
ただし String.valueOf(Objetct)は null の
オブジェクトが与えられてもエラーにならず、
きちんと nullを返してくれます。
文字列の長さと比較のメソッド
- public int length()
- public boolean equals(Object object)
- public boolean equalsIgnoreCase(String other)
- public int compareTo(String other)
- public boolean regionMatches(int toffset, String other, int ooffset, int len)
- public boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
length()メソッドは文字列の長さを返します。
値は char型の配列の長さであり、バイト数ではありません。
(Java言語では全ての文字は2バイトであり、1バイト文字と2バイト文字の
区別はありません。)
equals()メソッドは、
Stringのオブジェクトと引数に与えられた
オブジェクトの Stringオブジェクトとしての情報とが一致した場合に true を、
一致しない場合には false を返します。
Stringのオブジェクトが引数に与えられた場合は、
もちろん文字列どうしの比較になります。
equalsIgnoreCase()メソッドは、Stringのオブジェクトと引数に
与えられた Stringのオブジェクトを大文字小文字の違いを無視して比較し、
一致すれば true を一致しない場合は false を返します。
compareTo()メソッドは、Stringのオブジェクトと引数に与えられた
Stringのオブジェクトを比較し、
「大小関係」を返値である int型の数値の符号で示します。
符号は不一致の文字のコードの値の差を計算して求められます。
一致した時に 0が返る以外は返される数値の値は不定です。
また大文字小文字も含めて「辞書の順」に比較されるわけではありません。
resionMaches()メソッドは、Stringのオブジェクトのある特定の範囲を、
引数の中に与えられた Stringのオブジェクトの特定の範囲と比較し、
一致した場合は true を一致しなければ false を返します。
それぞれの文字列の比較の範囲の先頭のインデックスと範囲の長さも引数に
指定します。また、先頭の引数に大文字小文字の違いを無視するかどうかを
指定することもできます。
文字列内の検索のメソッド
- public boolean startsWith(String str)
- public boolean startsWith(String str, int offset)
- public boolean endsWith(String str)
- public int indexOf(int ch)
- public int indexOf(int ch, int fromIndex)
- public int indexOf(String str)
- public int indexOf(String str, int fromIndex)
- public int lastIndexOf(int ch)
- public int lastIndexOf(int ch, int fromIndex)
- public int lastIndexOf(String str)
- public int lastIndexOf(String str, int fromIndex)
startsWith()及びendsWith()メソッドは、
Stringのオブジェクトが指定された Stringのオブジェクトによって
開始または終了しているかをチェックします。
startsWith()はチェックの開始のインデックスを第2引数に指定できます。
indexOf()メソッドは Stringのオブジェクトの文字列内を検索し、
指定された文字または文字列が存在する最初の場所のインデックスを返します。
lastIndexOf()メソッドは indexOf()メソッドと同様の検索を、
文字列の末尾から先頭に向けて行います。
いずれのメソッドも検索対象が存在しない場合は -1 を返します。
いずれのメソッドも検索開始のインデックスを第2引数に指定することができます。
文字列内の置換のメソッド
- public String replace(char oldChar, char newChar)
- public String toLowerCase()
- public String toUpperCase()
replace() メソッドは、文字列の中にある第1引数の文字を、
第2引数の文字に置き換え、その結果の Stringクラスのオブジェクトを返します。
toLowerCase() メソッドは文字列内の大文字を小文字に変換します。
toUpperCase() メソッドは文字列内の小文字を大文字に変換します。
文字列の連結と分解のメソッド
- public String concat(String str)
- public String trim()
concat()メソッドは、引数に指定した文字列を自分自身の後ろに連結し、
その結果生じる Stringクラスのオブジェクトを返します。
trim()メソッドは文字列中の空白文字を取り除き、その結果の Stringクラスの
オブジェクトを返します。
オブジェクト自身の情報を取り出すためのメソッド
- public int hashCode()
- public String toString()
- public String intern()
hashCode() メソッドはオブジェクトのハッシュ・テーブルの int型の値を返します。
toString() はオブジェクトを Stringクラスに変換した結果、すなわち
自分自身を返します。
(このメソッドが定義されているのは、すべてのクラスは Object クラスで定義された
toString()メソッドを継承し、それぞれのクラスに応じて実装しなければならない
からです。)
intern()メソッドも自分自身と同じ文字列を返します。
intern()メソッドによって返される文字列の ID は、
その内容によって一意に決まるようになっています。
したがって、次のような形式で2つの文字列の比較を行うことができます。
s1.intern() == s2.intern()
これは s1.equals(s2) と同じ意味になります。上のような形式の方が
「見やすい」と考える人も多いでしょう。
StringBufferクラスは Objectクラスの直接のサブ・クラスです。
java.langパッケージに含まれます。
StringBufferもStringクラスと同様に文字列を表すクラスです。
単なる文字の配列ではなく文字列を操作するための基本的なメソッドも提供します。
Stringクラスのオブジェクトは、初期化された後は内容が変更できませんが、
StringBufferクラスのオブジェクトは、データの追加や変更が可能です。
そのためのメソッドが用意されています。
StringBufferクラスには public な変数は存在しません。
Stringクラスのメソッド
StringBufferクラスには、
引数の区別もすると 3個のコンストラクタと 20個余りのメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- コンストラクタ
- 文字列の長さを操作するのメソッド
- オブジェクトからデータを取り出すメソッド
- データの追加のメソッド
- データの挿入のメソッド
- データの変更のメソッド
- オブジェクト自身の情報を取り出すためのメソッド
コンストラクタ
- public StringBuffer()
- public StringBuffer(int length)
- public StringBuffer(String str)
引数なしのコンストラクタは空のオブジェクトを生成します。
int型の引数を与えるコンストラクタは、指定されたサイズの(中身は空の)
オブジェクトを生成します。
引数に Stringクラスのオブジェクトを与えるコンストラクタは、
そのStringオブジェクトの内容をもつオブジェクトを生成します。
文字列の長さを操作するのメソッド
- public int length()
- public synchronized void setLength(int newLength)
- public int capacity()
- public synchronized void ensureCapacity(int minimumCapacity)
length() メソッドはオブジェクトのサイズを返します。
(現在記憶されている文字列のサイズではない。)
setLength()メソッドは、オブジェクトのサイズを引数で指定したサイズに
設定し直します。
capacity()メソッドは、オブジェクトにあと何文字が記憶できるかを返します。
ensureCapacity()メソッドは、指定したサイズの空き領域を確保できるように
オブジェクトのサイズを調整します。
(オブジェクトのサイズが十分に大きい場合は何も変更しません。)
オブジェクトからデータを取り出すメソッド
- public synchronized char charAt(int index)
- public synchronized void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
charAt()メソッドは、指定されたインデックスの位置にある文字を返します。
getChars()メソッドは、オブジェクトに記憶された文字列の特定の部分を
char型の配列にコピーします。
第1、第2引数は記憶すべき箇所の開始と終了のインデックスです。
第3引数が格納先の char型の配列、第4引数はその配列のどの部分に記憶する
かを先頭のインデックスの値で指定します。
データの追加のメソッド
- public synchronized StringBuffer append(Object obj)
- public synchronized StringBuffer append(String str)
- public synchronized StringBuffer append(char str[])
- public synchronized StringBuffer append(char str[], int offset, int len)
- public StringBuffer append(boolean b)
- public synchronized StringBuffer append(char c)
- public StringBuffer append(int i)
- public StringBuffer append(long l)
- public StringBuffer append(float f)
- public StringBuffer append(double d)
append()メソッドはオブジェクトの末尾に新しいデータを追加します。
与えられたさまざまな型のデータ(あるいはオブジェクト)
は Stringクラスのオブジェクトに変換されます。
char型の配列をデータとして与える場合には、その一部分を指定する引数を
指定できます。第2引数がデータの開始のインデックス、第3引数がデータの
長さです。
返値として返されるのはオブジェクト自身です。
通常は返値をあえて利用する必要はありません。
返値を積極的に利用するのは 《 + 》演算子の記法を用いた場合です。
以下の2つの表現は同じ結果になります。
StringBuffer strbuf;
int i;
strbuf.append( i );
strbuf = strbuf + i;
append() メソッドに synchronized とそうでないものがあるように見えます。
これは単に synchronized でないメソッドの内部で
synchronized のメソッドが呼び出されているからです。
データの挿入のメソッド
- public synchronized StringBuffer insert(int offset, Object obj)
- public synchronized StringBuffer insert(int offset, String str)
- public synchronized StringBuffer insert(int offset, char str[])
- public StringBuffer insert(int offset, boolean b)
- public synchronized StringBuffer insert(int offset, char c)
- public StringBuffer insert(int offset, int i)
- public StringBuffer insert(int offset, long l)
- public StringBuffer insert(int offset, float f)
- public StringBuffer insert(int offset, double d)
insert()メソッドはオブジェクトの記憶している文字列の途中に、
新しいデータを追加します。
第1引数は、挿入すべき位置のインデックスです。
第2引数に与えられたさまざまな型のデータ(あるいはオブジェクト)
は Stringクラスのオブジェクトに変換されます。
返値として返されるのはオブジェクト自身です。
通常は返値をあえて利用する必要はありません。
insert() メソッドに synchronized とそうでないものがあるように見えます。
これは単に synchronized でないメソッドの内部で
synchronized のメソッドが呼び出されているからです。
データの変更のメソッド
- public synchronized void setCharAt(int index, char ch)
setCharAt()メソッドは、第1引数で指定されたインデックスの位置に
記憶された文字を、第2引数で指定された文字に置き換えます。
(挿入するわけではありません。)
オブジェクト自身の情報を取り出すためのメソッド
toString() は記憶された文字列を Stringクラスのオブジェクトとして
返します。
Threadクラスは Objectクラスの直接のサブ・クラスで、
Runnableをインプリメントしています。
java.langパッケージに含まれます。
Threadはスレッドとのインターフェイスを提供するクラスです。
スレッドをコントロールするメソッドを提供します。
Threadクラスの変数
Threadクラスには、スレッドの優先順位を表す定数が publicな変数として
定義されています。
- public final static int MIN_PRIORITY
- public final static int NORM_PRIORITY
- public final static int MAX_PRIORITY
スレッドの優先度は MIN_PRIORTY(=1)から MAX_PRIORITY(=10) までの
数値で表されます。
特に指定しない場合のデフォルト値は NORM_PRIORITY(=5)が用いられます。
Threadクラスのメソッド
Threadクラスには、
引数の区別もすると 7個のコンストラクタと 30個余りのメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- コンストラクタ
- スレッドの処理をコントロールするためのメソッド
- スレッドの状態をコントロールするためのメソッド
- システムによるスレッドの操作に関連するメソッド
- カレント・スレッドのコントロールを行う staticなメソッド
- スレッドのスケジュールを調べる staticなメソッド
- Threadのオブジェクト自身の情報を与えるメソッド
- その他のメソッド
コンストラクタ
- public Thread()
- public Thread(Runnable target)
- public Thread(ThreadGroup group, Runnable target)
- public Thread(String name)
- public Thread(ThreadGroup group, String name)
- public Thread(Runnable target, String name)
- public Thread(ThreadGroup group, Runnable target, String name)
コンストラクタに与えることができる引数は3種類あります。
target は run()メソッドの実装を持つオブジェクトです。
run()メソッドの内容がスレッドの処理となります。
group は ThreadGroup のオブジェクトです。
Threadのオブジェクトをグループに所属させたい時に指定します。
name は Threadのオブジェクトに固有の名前を付けたい時に指定します。
スレッドの処理をコントロールするためのメソッド
- public synchronized void start()
- public void run()
- public final void stop()
- public final synchronized void stop(Throwable o)
- public final void suspend()
- public final void resume()
- public final synchronized void join(long millis) throws InterruptedException
- public final synchronized void join(long millis, int nanos) throws InterruptedException
- public final void join() throws InterruptedException
start()メソッドは、オブジェクトに結びつけられた Runnableのオブジェクトに
実装された run()メソッドを呼び出し、スレッドの処理を開始します。
Threadのオブジェクト自身を Runnableのオブジェクトとした場合には、
run()メソッドに処理の内容を定義します。
stop()メソッドはスレッドの処理を停止させます。
suspend()メソッドは resume()メソッドが呼ばれるまで、
一時的にスレッドの処理を中断します。
join()メソッドは実行されているスレッドの処理が終わるのを、
引数に指定したタイムアウトの時間だけ待ち続けます。
第1引数はミリ秒単位の時間です。
さらに短い時間間隔を指定したい場合は、第2引数にナノ秒単位の時間を
指定することもできます。
(ただし現時点のマシンの能力では、指定してもほとんど無意味です。)
引数を与えないと終了するまで永久に待ち続けます。
スレッドの状態をコントロールするためのメソッド
- public final boolean isAlive()
- public final void setPriority(int newPriority)
- public final int getPriority()
- public final ThreadGroup getThreadGroup()
isAlive()はスレッドの処理が活動中であるかをチェックします。
start()メソッドが呼ばれてから、
stop()メソッドが呼ばれるまで isAlive()の値は trueです。
setPriority()およびgetPriority()は、スレッドの優先度の
設定および取得を行います。
getThreadGroup()メソッドは、スレッドが所属する ThreadGroup()を返します。
システムによるスレッドの操作に関連するメソッド
- public int countStackFrames()
- public final boolean isDaemon()
- public final void setDaemon(boolean on)
- public void checkAccess()
countStackFrames()メソッドは、Threadのオブジェクトが現在スタック上に
何個のフレームを持っているかを返します。
isDaemon()メソッドは、Threadのオブジェクトがシステムのものか
ユーザーのものかを識別します。システムのものなら trueが返ります。
setDaemon()メソッドは、Threadの所属を設定します。trueならば
Threadのオブジェクトはシステムのものとなり、false ならユーザーの
ものとなります。全ての Threadのオブジェクトがシステムのものになった
時点で、プログラムの実行が終了したと判断されます。
checkAccess()メソッドは、カレント・スレッドが Threadのオブジェクトに
対するアクセス権限があるかどうかをセキュリティ・マネジャに問い合わせます。
アクセス権限がない場合は Exceptionを発生します。
カレント・スレッドのコントロールを行う staticなメソッド
- public static Thread currentThread()
- public static void yield()
- public static void sleep(long millis) throws InterruptedException
- public static void sleep(long millis, int nanos) throws InterruptedException
- public static void dumpStack()
カレント・スレッドとは、その瞬間に実行中のスレッドのことです。
(カレント・スレッドは常に1個しか存在しません。)
Threadクラスにはカレント・スレッドをコントロールするための
メソッドも提供されています。
これらは staticなメソッドで、
すべてのスレッドのオブジェクトによって共通して利用されます。
currentThread()メソッドは、
現在のカレント・スレッドのオブジェクトを返します。
yield()メソッドは現在のカレント・スレッドの処理を中断し、次のスレッド
の処理に移ります。
sleep()メソッドはカレント・スレッドの処理を、
指定された時間だけ休ませます。第1引数はミリ秒単位で指定する休憩時間です。
さらに短い時間間隔を指定したい場合は、第2引数にナノ秒単位の時間を
指定することもできます。
(ただし現時点のマシンの能力では、指定してもほとんど無意味です。)
sleep()メソッドは次のように使用することになります。
try{
Thread.sleep( 1000 ); // 現在の処理を1秒間中断
}
catch(InterruptedException e)
{
// エラー処理
}
dumpStack()はデバッグ用のメソッドで、カレント・スレッドのスタックの状況を
出力します。
スレッドのスケジュールを調べる staticなメソッド
- public static int activeCount()
- public static int enumerate(Thread tarray[])
他のスレッドの状況を知るためのメソッドも、
staticなメソッドとして提供されています。
activeCount()メソッドは、スレッド・グループ内のアクティブな
スレッドの数を返します。
enumerate()メソッドは、スレッド・グループ内の全てのアクティブな
Threadの状態のコピーを、引数に与えた配列に格納します。
Threadのオブジェクト自身の情報を与えるメソッド
- public final void setName(String name)
- public final String getName()
- public String toString()
setName()およびgetName()メソッドは、スレッドの名前の設定および取得を
行います。toString()メソッドは、スレッドの名前、優先度、グループに
関する情報を Stringクラスのオブジェクトとして返します。
その他のメソッド
- public void interrupt()
- public static boolean interrupted()
- public boolean isInterrupted()
- public void destroy()
この他にドキュメントには上記のメソッドの存在が記されていますが、
JDK 1.0の最初のリリースでは、
これらのメソッドの機能は提供されていないようです。
Systemクラスは Objectクラスの直接のサブ・クラスです。
java.langパッケージに含まれます。
Systemはその名のとおりシステムとのインターフェイスを提供します。
System クラスのオブジェクトが生成されることはありません。
System クラスの変数及びメソッドは全て static です。
Systemクラスの変数
Systemクラスには、標準入出力に対応する3つの public変数が用意されています。
- public static InputStream in
- public static PrintStream out
- public static PrintStream err
in, out, err はそれぞれ、標準入力、標準出力、標準エラー出力を表します。
(inputStream および PrintStreamクラスの説明は、第8章を参照。)
たとえば、標準出力にメッセージを表示するのなら次のようになります。
System.out.println("Welcome to Wakkanai!");
Systemクラスのメソッド
Systemクラスには、
引数の区別もすると全部で十数個のメソッドが定義されています。
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- システムから情報を取得するメソッド
- バーチャル・マシンの環境に関するメソッド
- バーチャル・マシンの動作に関するメソッド
- その他のメソッド
システムから情報を取得するメソッド
- public static long currentTimeMillis()
- public static String getenv(String name)
currentTimeMillis()メソッドは、1970年 1月 1日の 0:00 から現在までの
時刻をミリ秒単位で返します。
getenv()メソッドは、指定された環境変数の値を調べて返します。
バーチャル・マシンの環境に関するメソッド
- public static SecurityManager getSecurityManager()
- public static void setSecurityManager(SecurityManager s)
- public static Properties getProperties()
- public static void setProperties(Properties props)
- public static String getProperty(String key)
- public static String getProperty(String key, String def)
getSecurityManager()メソッドは、
現在使用されているセキュリティ・マネジャを返します。
setSecurityManager()メソッドはセキュリティ・マネジャを設定します。
getProperties() および setProperties()は、プロパティのセットの
取得・設定を行います。
getProperty()はキーに対応するプロパティの情報を返します。
(第2引数はプロパティが登録されていない場合のデフォルト値になります。)
バーチャル・マシンの動作に関するメソッド
- public static void load(String filename)
- public static void loadLibrary(String libname)
- public static void gc()
- public static void runFinalization()
- public static void exit(int status)
load()および loadLibrary()は、指定されたバイト・コードのモジュールを
動的にロードします。
gc()メソッドはガーベッジ・コレクタを明示的に呼び出します。
runFinalization()メソッドは、不要になったオブジェクトの後始末の処理を
明示的に呼び出します。
exit()メソッドはバーチャル・マシンを終了させます。
その他のメソッド
- public static void arraycopy(Object src, int src_position, Object dst, int dst_position, int length)
arraycopy()メソッドは配列の内容を他の配列にコピーします。
第1引数がコピー元、第3引数がコピー先の配列です。
第2引数は、コピー元の配列の中でコピーの対象となる先頭のインデックスです。
第4引数は、コピー先の配列の中でコピーの対象となる先頭のインデックスです。
第5引数は、コピーされる要素の数です。