cappuccinoのコンピタブログ

cappmac.exblog.jp
ブログトップ

Swingはファイルダイアログ出すの簡単

JComponetを使って画像を表示するプログラムを作ったのだが,コマンドラインから引数を与えるのはめんどくさい.

というわけで起動したらファイルダイアログが出て任意の画像を選択するとそれを開いて表示って言うプログラムを作ってみた.

awtの頃はToolkitとかいうのでめんどくさいソースをこねくり回さないと行けない経験があったのだが,swingを使うとJFileChooserというものが使えて比較的簡単にいけるらしい,これとImageIOを使ってBufferedImageに落とし込めばラクに画像を開くことができそう.



JFileChooser file = new JFileChooser();
で,ファイル選択ダイアログが出せる.

これをつかってファイルが選択できれば

file.getSelectedFile().getPath();

としてファイルの絶対パスをStringでとることができるこれをとりあえずfilesightに代入しておく

Stringになってさえいれば

BufferedImage img = ImageIO.read(new File(filesight));

とすることでBufferedImageに画像ファイルを落とし込むことができる.あとはJComponetなりでテキトウに料理すればいい

-以下ソースね(Test.java)-
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.*;

public class Test {
public static void main(String args[]) {
JFrame frame = new JFrame("test");

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});

JFileChooser file = new JFileChooser();
if (file.showOpenDialog(frame) == JFileChooser.CANCEL_OPTION)
System.exit(0);
String filesight = file.getSelectedFile().getPath();
BufferedImage image = null;
try{
image = ImageIO.read(new File(filesight));
int width = image.getWidth();
int height = image.getHeight();
final DrawPad drawPad = new DrawPad(image);
frame.getContentPane().add(BorderLayout.CENTER,drawPad);
frame.setSize(width+10, height+30);
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setVisible(true);
}catch (IOException ex){
ex.printStackTrace();
}
}
}

class DrawPad extends JComponent {
BufferedImage image;
int pointColor;
public DrawPad(BufferedImage i) {
image = i;
repaint();
}

public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, null);
}
}

適当に張ったのでかなり崩れそうw
[PR]
by cappuccino_mac | 2006-09-10 01:55 | 設定覚え書き