↓↓クリックして頂けると励みになります。
【27 | 図形描画】 << 【ホーム】 >> 【29 | アニメーション描画】
AWTでより凝ったグラフィックス描画をする場合、すでにファイルとなっている画像を利用した方が手軽です。
AWTの標準で扱える画像のフォーマットは、JPEG、GIF、PNGです。
画像の生成方法は実行されるウィンドウシステムによって異なりますので、どのシステムで実行されるかを取得してから画像を生成します。
取得の方法は以下の通りです。
Toolkit tk = Toolkit.getDefaultToolkit(); //実行されているシステムを取得 Image image = tk.getImage("mypaint.png"); //イメージの取得
Visual Studio Codeで以下のプログラム「AwtDrawTest2.java」を作成して下さい。
新規作成 【AwtDrawTest2.java】
import java.awt.*; public class AwtDrawTest2 extends Canvas { private final int MAX_IMAGE = 7; private final int WIDTH = 500; private final int HIGHT = 400; private Image[] image = new Image[MAX_IMAGE]; private MediaTracker tracker; public AwtDrawTest2() { setSize(WIDTH, HIGHT); setBackground(Color.black); Toolkit tk = Toolkit.getDefaultToolkit(); tracker = new MediaTracker(this); for(int i=0; i<MAX_IMAGE; i++) { image[i] = tk.getImage("char" + i + ".gif"); tracker.addImage(image[i], i); } try { tracker.waitForAll(); } catch (InterruptedException e) { System.err.println("tracker error"); } } public void paint(Graphics g) { for (int i=0; i<MAX_IMAGE; i++) { g.drawImage(image[i], i*50+50, 100, this); } g.setColor(Color.yellow); Font font = new Font("Serif", Font.ITALIC, 48); //フォント情報を追加 g.setFont(font); g.drawString("サンプル画像の表示", 10, 200); } public static void main(String[] args) { AwtDrawTest2 canvas = new AwtDrawTest2(); Frame frame = new Frame("AwtDrawTest2"); frame.add(canvas); frame.pack(); frame.setVisible(true); } }
このプログラムを実行するには画像ファイルが必要です。
char0.gif〜char6.gifをプログラムを保存するのと同じフォルダ(ディレクトリ)に保存してください。
[char0.gif]
[char1.gif]
[char2.gif]
[char3.gif]
[char4.gif]
[char5.gif]
[char6.gif]
イメージの描画は、GraphicsクラスのdrawImage()メソッド
を使用します。
グラフィックスコンテキスト(paintメソッド)に描くことで実現できます。
public void paint( Graphics g ) { g.drawImage(image, 100, 100, this); //イメージを表示 }
drawImage()メソッド
の引数は「イメージ、表示する左上点のx座標、y座標、イメージ表示に関する情報を通知する先のオブジェクト」です。
イメージや音声の状態を監視するのがメディアトラッカーです。
メディアトラッカーを使用することで全イメージが揃ってからプログラムを開始させるなどといったことが可能になります。
MediaTracker tracker = new MediaTracker(this) //イメージデータ通知用 tracker.addImage(image, 1); //imageを登録して、通知用のIDを割り当てる try { //全イメージのダウンロードが終わるまで待つ tracker.waitForAl(); } catch (InterruptedException e) { //エラーがあった場合の処理 System.err.println("tracker error"); }
文字列もイメージと同様にグラフィックスコンテキストに描くことで実現できます。
GraphicsクラスのdrawString()メソッド
を使用します。
これでdrawString()
以前に設定された色やフォントでの文字列表示が行われます。
public void paint(Graphics g) { g.drawString("この文字列が表示されます", 100, 100); //文字列の描画 }
drawString()メソッド
の引数は、「表示文字列, 左端の文字のベースラインを基準としてx座標, y座標」です。
フォントの指定は一般的に論理フォントと呼ばれる呼び方で指定します。
以下の5種類はどのようなプラットフォームにも存在することが約束されています。
名前 | 意味 |
---|---|
Serif | 明朝系 |
SansSerif | ゴシック系 |
Monospaced | 等幅 |
Dialog | ダイアログ(対話)用 |
DialogInput | 入力用 |
さらにこれらのフォントに対して文字装飾を行うことが可能です。
名前 | 意味 |
---|---|
PLAIN | 通常 |
BOLD | 強調 |
ITALIC | 斜体 |
フォントの設定は以上の情報とフォントサイズを指定することで行います。
またフォントはコンポーネントあるいはグラフィックスコンテキストに設定することが出来ます。
//グラフィックスコンテキストへの設定 public void paint(Graphics g) { Font font = new Font("Serif", Font.ITALIC, 48); g.setFont(font); g.drawString("この文字列が表示されます", 100, 100); //文字列の描画 } //コンポーネントへの設定 Canvas canvas = new Canvas(); Font font = new Font("Serif", Font.ITALIC, 48); canvas.setFont(font);
public class AwtDrawTest2 extends Canvas {
extends Canvasで、Canvasクラスのフィールド、メソッドをすべて継承しています。
これによりコンストラクタ内ですべてを記述することなくCanvasの機能を使うことが出来ます。
必要な部分のみ記述することで、その部分のみを書き換えることが出来ます。
プログラムを実行してみてください。
大きさ(500,400)のフレームが表示され、中にキャンバスが表示されています。
キャンバスにはcahr0.gif〜char6.gifの画像が指定された位置に表示されています。
その下に指定したフォントで「サンプル画像の表示」と表示されます。
フレームの終了ボタンは使えませんので、「Ctrlキー+Cキー」で強制終了してください。
~/Desktop/Programming/JP $ javac AwtDrawTest2.java ~/Desktop/Programming/JP $ java AwtDrawTest2
【27 | 図形描画】 << 【ホーム】 >> 【29 | アニメーション描画】
↓↓クリックして頂けると励みになります。