import java.awt.Canvas; // Canvasクラスをインポート import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class ImageViewerCanvas extends Frame { private Image image; private int imgWidth,imgHeight; ImageViewerCanvas() { setImage(); // 画像の読み込み DrawCanvas dc = new DrawCanvas(); // キャンバスの作成 dc.setSize(imgWidth, imgHeight); // キャンバスのサイズを画像に合わせる add(dc); // キャンバスをウィンドウに追加 setTitle("縁側の猫"); pack(); // 張り付けたコンポーネントに合わせてウィンドウ・サイズを調整 setVisible(true); // ウィンドウを表示する addWindowListener(new ExitWindow()); // 終了処理用のイベント・リスナーを追加 } private void setImage() { image = Toolkit.getDefaultToolkit().getImage("cat.png"); MediaTracker mt = new MediaTracker(this); mt.addImage(image, 0); try { mt.waitForID(0); } catch(InterruptedException ex) { throw new IllegalArgumentException("例外発生"); } imgWidth = image.getWidth(this); imgHeight = image.getHeight(this); } public static void main(String[] args) { ImageViewerCanvas viewer = new ImageViewerCanvas(); // インスタンスの生成 } class DrawCanvas extends Canvas { // キャンバスへの描画処理を行うクラス public void paint(Graphics g) { g.drawImage(image, 0,0, imgWidth, imgHeight, this); } } class ExitWindow extends WindowAdapter { // 終了ボタンが押された際の処理 public void windowClosing(WindowEvent e) { System.out.println("終了します"); ImageViewerCanvas.this.setVisible(false); ImageViewerCanvas.this.dispose(); System.exit(0); } } }