JAVA 2D のコンセプト

JAVA画像処理の基本
- paint(), repaint(), update()のしくみ
- オフスクリーンとフロントスクリーン
- MyCanvas(JPanel)はなぜ必要か
- 描画の基本(StrokeとPaint属性)
 
従来のJAVA画像処理との比較

- Image と BufferedImageの違い

- Graphics と Graphics2Dの違い
 
 
JAVA アプリケーション(実行部)
- テキストデータ読込み
- テキストデータ書出し
- 画像の読込み
- 画像の画素単位での操作
- 画像の保存(JPG)
- 画像の保存(BMPほか)
 
- アニメーション(スレッド制御)
- アニメーション(マルチスレッド制御)
- 2DFFT
 
 
JAVA アプリケーション(GUI部)
- SWINGとAWTの違い
- JBuilderで自動作成
 
- Pane, JPanel, JLabelの違い

- pack()とsetVisible()

- setVisible()とshow()の違い
 
- メニュー
- ボタン
- ダイアログ1(FileChooser)
- ダイアログ2(ポップアップダイアログ)
 
 
 
 
JAVA アプリからアプレットへ変換
IOクラスは使えない?(多分使えない)
SWINGオブジェクトは使えない?
 
 
 
JAVAアプリケーション・サンプル
- JPG画像を読み込んで、その画像になんらかのフィルタをかけて別の画像として保存する
   
   
   
 
WEB参考資料 ・リンク
- JAVA1.3のインストール(IBM)
- 拡張APIのインストール(JAI)
- JAVA2D API ドキュメント

- JARファイルの作成と操作

 
参考書籍
 
 
 
 

JAVA2D(1.3)に関するまとめページ

このページは野口研有志によるJAVA2(Ver. 1.3以降)の解説ページです。 JAVAを学習しながらまとめているので、もし間違いがあったら、ご指摘いただけると助かります。

JAVA2は以下の数箇所において、JAVA1から大幅な仕様変更を行っています。

・GUI構築関連のクラス
・グラフィック関連のクラス
・ストリーム 入力/出力 関連のクラス

以前のJAVA1ではC++を土台にした、より明確なクラス構成と言語体系によって誰もに歓迎されましたが、バージョンアップを重ねるごとに、各クラスの拡張性を求められた結果、仕様変更がたびたび行われる、というやや悪循環の様相を呈していました。とくにJAVA2から導入されたJAVA2D・3D関連のメソッドはグラフィック操作を飛躍的に効率化させましたが、その反面、旧来のクラスも引き続き継承されたため、ひとつのフローを実現するのに、二つ以上の方法が存在するという、かえって繁雑さが目立つようになりました。いつかJAVA2Dクラスへまとまっていくものとみられますが、「どんなやり方でもできる」のが現状であり、相反する二つの方法論のうち、どちらが正しいのか、あるいは将来の拡張性に対応しているのか、ということがわかりにくくなっているところがあります。

そこで大幅な仕様変更が行われた以上3点の部分を重点的にしながら、JAVA2の解説をしていく予定です。

 

JAVAアプリケーション GUI部
 
 
 
contentPane, JPanel, JLabelの違い(SWINGオブジェクトのコンセプト)

Swingオブジェクトは先に示したとおり、ほとんどのクラスの名前がJから始まっており、それは同じ名前のAWTのクラスを継承したと考えてよい。
Swingオブジェクトは3層構造をしており、GUI構築にはこの理解が大切である。
Swing コンポーネントを配置する為の外枠であるTop-level コンテナは必須であり、そこに Intermediate コンテナを配置し、さらに Atomic コンテナを配置する。各コンテナは層として他の層の土台として働くことになる。


トップレベル・コンテナ(Top-Level Containers )
他の Swing コンポーネントを描画するためのコンテナ: JFrame, JDialog, JApplet
全てのトップレベル・コンテナはコンテント・ペイン(ContentPane)を持っており、可視的な部品の配置に用いられます。


中間コンテナ(Intermediate Container)
他の Swing コンポーネントを配置する為などに用いる:

- 特定の役割を持たない中間コンテナ
JPanel, JScrollPane, ContentPane(これはトップレベルコンテナを作ったときに同時に作られ、単独で作ることはできない。)
中間コンテナの扱いだが、ContentPaneの上にほかの中間コンテナをaddしなければならず、その点ではトップレベルコンテナと中間コンテナの間にあると考えられる。getContentPaneによってトップレベルコンテナから取得することによって操作する。

- UI 上で特定の役割を果たす中間コンテナ
JInternalFrame, JLayeredPane, JRootPane


コア・コンテナ(Atomic Components)
個々の部品をあらわす。

- ユーザーからの入力を受け取る
JButton, JCombobox

- ユーザーに情報を提示する
JLabel, JProgressBar

- その他の複雑な部品
JColorChooser, JFileChooser, JTableなど

 
pack()とsetVisible()の違い

setVisible()は単にオブジェクト(ウィンドウやコンテンツペインオブジェクト)を表示したりしなくしたりするメソッドなのに対し、pack()はオブジェクトが表示される準備がされていなくてもオブジェクトのサイズなどを自動的に最適化した上でそのサイズの変更を行うだけである。このとき、あらかじめsetSizeメソッドで値をいれた上で、pack()を使用するとその引数が有効になるのかはまだ未確認。


ウィンドウ・ダイアログボックス表示の手順
  1. setVisible(true)で表示
2. getContentPane().add()メソッドでコンポーネントオブジェクトを追加
3. pack()でサイズの最適化


- setVisible()
  public void setVisible(boolean b)
パラメータ b の値に応じて、このコンポーネントを表示するか、または非表示にします。
パラメータ:
b - true の場合、このコンポーネントを表示する。そうでない場合はこのコンポーネントを非表示
ダイアログや、ウィンドウオブジェクトを消すときは、setVisible(false)にして dispose() でオブジェクトを廃棄する。

例:
this.setVisible(false);
this.dispose();


- pack()
  public void pack()
サブコンポーネントの推奨サイズおよびレイアウトに合わせて、この Window をサイズ変更します。(表示はしない。) ウィンドウおよびそのオーナがまだ表示可能でない場合は、両方とも表示可能にしてから推奨サイズを計算します。preferredSize が計算されたあとに、Window は検査を受けます。

 
setVisible()とshow()の違い


もともとはともにウィンドウやボタンなどを表示したりするためのメソッド。
show()にはウィンドウを一番手前に出す効果もある。

Componentオブジェクト(コンテンツペイン、フレームの内側のボタン、アイコンなどのアイテム)の表示には、setVisible() show()も使用できるが推奨されていない。 JDialog, JWindowオブジェクトなどの一番外枠を示すオブジェクトだとsetVisible(), show()するどちらを使用してもいい。

- setVisible()
  public void setVisible(boolean b)
パラメータ b の値に応じて、このコンポーネントを表示するか、または非表示にします。
パラメータ:
b - true の場合、このコンポーネントを表示する。そうでない場合はこのコンポーネントを非表示


- show()
  Dialog.show(), Window.show()
public void show()Dialog, Windowを表示します。ダイアログまたはそのオーナがまだ表示可能でない場合は、その両方ともが表示可能になります。ダイアログは、表示される前に検査されます。ダイアログがすでに表示されている場合、このメソッドはダイアログを前面に表示します。
ダイアログがモーダルの場合、hide または dispose を呼び出すことによりダイアログを隠すまでは、この呼び出しはブロックされます。イベントを送るスレッドからモーダルダイアログを表示してかまいません。ツールキットでは、このメソッドを呼び出したスレッドがブロックされていても別の送信スレッドが実行されるからです。


推奨されないメソッド
Component.show()
かわりにsetVisible()を用いる

 
>> next page >>