import java.awt.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.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JPanel; public class ImageViewer2 extends JPanel { private JFrame frame; ImageViewer2() { JButton button = new JButton("Select File"); // 画像選択ボタンの作成 add(button); button.addActionListener(new ActionListener() { // ボタン押し下げ検知用のイベント・リスナー追加 public void actionPerformed(ActionEvent e) { // 押し下げイベント発生時の処理 JFileChooser chooser = new JFileChooser(); // ファイル選択ダイアログの作成 int returnVal = chooser.showOpenDialog(frame); if(returnVal == JFileChooser.APPROVE_OPTION) { // ファイルが選択されたかどうかを判断 String filename = chooser.getSelectedFile().getPath(); // 選択されたファイルのファイル名取得 ImageViewer viewer = new ImageViewer(filename); // 選択されたファイルを表示 } } }); } public static void main(String[] args) { JFrame frame = new JFrame("Image Viewer"); // メイン・ウィンドウの作成 frame.getContentPane().add(new ImageViewer2()); frame.pack(); frame.setVisible(true); // メイン・ウィンドウの表示 } public class ImageViewer extends Frame { // ImageViewerCanvas.javaをほぼそのまま流用 private int imgWidth,imgHeight; private Image image; ImageViewer(String filename) { setImage(filename); DrawCanvas dc = new DrawCanvas(); // image変数に格納した画像をキャンバスに描画するインスタンスを作成 dc.setSize(imgWidth, imgHeight); add(dc); pack(); setTitle(filename); setVisible(true); addWindowListener(new ExitWindow()); } private void setImage(String filename) { // 指定したファイル名の画像を読み込むように改良 image = Toolkit.getDefaultToolkit().getImage(filename); 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); } class ExitWindow extends WindowAdapter { public void windowClosing(WindowEvent e) { System.out.println("画像を閉じます"); // プログラムは終了させないのでメッセージ変更 ImageViewer.this.setVisible(false); ImageViewer.this.dispose(); } } class DrawCanvas extends Canvas { // キャンバスへの描画処理を行うクラス public void paint(Graphics g) { g.drawImage(image, 0,0, imgWidth, imgHeight, this); } } } }