package com.c2kernel.gui.tabs.outcome.form.field; import java.awt.Component; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileInputStream; import java.lang.reflect.Array; import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JLabel; import org.apache.xerces.impl.dv.util.Base64; import com.c2kernel.utils.Logger; public class ImageEditField extends StringEditField { JLabel imageLabel; Box imagePanel; JButton browseButton; String encodedImage; static JFileChooser chooser = new JFileChooser(); static { chooser.addChoosableFileFilter(new javax.swing.filechooser.FileFilter() { public String getDescription() { return "Image Files"; } public boolean accept(File f) { return (f.isDirectory() || (f.isFile() && (f.getName() .endsWith(".gif") || f.getName().endsWith(".jpg") || f.getName().endsWith(".jpeg") || f.getName().endsWith(".png")))); } }); } public ImageEditField() { super(); imageLabel = new JLabel(); imagePanel = Box.createVerticalBox(); browseButton = new JButton("Browse"); browseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int returnVal = chooser.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); try { FileInputStream fis = new FileInputStream(file); byte[] bArray = (byte[]) Array.newInstance(byte.class, (int) file.length()); fis.read(bArray, 0, (int) file.length()); fis.close(); ImageIcon newImage = new ImageIcon(Toolkit .getDefaultToolkit().createImage(bArray)); imageLabel.setIcon(newImage); encodedImage = Base64.encode(bArray); } catch (Exception ex) { Logger.exceptionDialog(ex); } } } }); imagePanel.add(imageLabel); imagePanel.add(Box.createVerticalStrut(5)); imagePanel.add(browseButton); } public String getDefaultValue() { return ""; } public Component getControl() { return imagePanel; } public String getText() { return encodedImage == null ? "" : encodedImage; } public void setText(String text) { encodedImage = text; if (text != null && text.length() > 0) { byte[] decodedImage = Base64.decode(encodedImage); imageLabel.setIcon(new ImageIcon(Toolkit.getDefaultToolkit() .createImage(decodedImage))); } } public void setEditable(boolean editable) { browseButton.setVisible(false); } }