import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class ImageTest extends JFrame implements ActionListener
{
private Image image;
private MediaTracker tracker;
private Graphics g;
private JPanel panel1; // panel1には画像を表示
private JPanel panel2; // panel2にはfile chooserボタンを配置
private JButton button = new JButton("Open");
private JFileChooser chooser = new JFileChooser();
public static void main(String[] args)
{
ImageTest it = new ImageTest();
}
public void paintComponent(Graphics g) // こんな感じでやればうまくいくかと思ったが失敗
{
g = panel1.getGraphics();
g.drawImage(image, 0, 0, this);
}
public ImageTest() // コンストラクタ
{
Container c = getContentPane();
panel1 = new JPanel();
panel2 = new JPanel();
panel1.setBackground(Color.white);
panel1.setPreferredSize(new Dimension(100, 300));
panel2.setPreferredSize(new Dimension(50, 50));
button.addActionListener(this);
panel2.add(button);
c.setLayout(new BorderLayout());
c.add(panel1, BorderLayout.NORTH);
c.add(panel2, BorderLayout.SOUTH);
setSize(400, 400);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
int res = chooser.showOpenDialog(this);
String fPath;
// ボタンが押されたらFileChooserを開きファイルをロード
if(e.getActionCommand() == "Open")
{
try
{
if (res == JFileChooser.APPROVE_OPTION)
{
File file = chooser.getSelectedFile();
fPath = file.getAbsolutePath();
tracker = new MediaTracker(this);
ImageLoader loader = new ImageLoader();
image = loader.getImage(fPath);
tracker.addImage(image, 1);
try
{
tracker.waitForID(1);
}
catch(InterruptedException err) {}
// ここで何かしらのダイアログボックスを出すと画像はなぜか正常に表示されたままになる
//JOptionPane.showMessageDialog(null, fPath);
g = panel1.getGraphics();
g.drawImage(image, 0, 0, this); // 一瞬で消える
}
}
catch(Exception ex){}
}
}
private class ImageLoader extends ClassLoader
{
private Image getImage(String str)
{
Image image = Toolkit.getDefaultToolkit().createImage(str);
return image;
}
}
}
|