001    /*
002     * Painter2PropertyEditor.java
003     *
004     * Created on August 2, 2006, 8:27 AM
005     *
006     * To change this template, choose Tools | Template Manager
007     * and open the template in the editor.
008     */
009    
010    package org.jdesktop.swingx.editors;
011    
012    import java.awt.Color;
013    import java.awt.Component;
014    import java.awt.event.ActionEvent;
015    import java.awt.event.ActionListener;
016    import java.beans.PropertyEditorSupport;
017    import java.io.File;
018    import java.io.PrintWriter;
019    import java.io.StringWriter;
020    import javax.swing.JFileChooser;
021    import javax.swing.JOptionPane;
022    import org.jdesktop.swingx.URLPainter;
023    import org.jdesktop.swingx.painter.MattePainter;
024    import org.jdesktop.swingx.painter.Painter;
025    
026    /**
027     *
028     * @author joshy
029     */
030    public class Painter2PropertyEditor extends PropertyEditorSupport {
031        Painter painter = new MattePainter(Color.BLUE);
032        JFileChooser picker;
033        
034        void log(String str) {
035            //JOptionPane.showMessageDialog(picker,str);
036            System.out.println(str);
037        }
038        /** Creates a new instance of Painter2PropertyEditor */
039        public Painter2PropertyEditor() {
040            picker = new JFileChooser();
041            picker.setApproveButtonText("Load Painter");
042            picker.setMultiSelectionEnabled(false);
043            picker.setSelectedFile(new File("/Users/joshy/projects/current/AB5k/src/java/ab5k/desklet/"));
044            picker.addActionListener(new ActionListener() {
045                public void actionPerformed(ActionEvent actionEvent) {
046                    try {
047                        File file = picker.getSelectedFile();
048                        painter = new URLPainter(file);
049                        //painter = PainterUtil.loadPainter(file);
050                        firePropertyChange();
051                        log("loaded the painter: " + painter);
052                    } catch (Throwable ex) {
053                        //System.out.println("error loading the painter: " + ex.getMessage());
054                        //ex.printStackTrace();
055                        StringWriter wrt = new StringWriter();
056                        ex.printStackTrace(new PrintWriter(wrt));
057                        JOptionPane.showMessageDialog(picker,ex.getMessage() + " " + wrt.toString());// + painter.getClass().getName());
058                    }
059                }
060            });
061        }
062        
063        public Painter getValue() {
064            return painter;
065        }
066        
067        public void setValue(Object object) {
068            log("setting: " + object);
069            painter = (Painter)object;
070            super.setValue(object);
071        }
072        
073        public void setAsText(String text) throws IllegalArgumentException {
074    //        u.p("setting as text: " + text);
075            log("setting as text: " + text);
076        }
077        
078        public String getAsText() {
079            if(painter instanceof URLPainter) {
080                return ((URLPainter)painter).getURL().toString();
081            }
082            if(painter != null) {
083                return painter.getClass().getName();
084            } else {
085                return "null!!";
086            }
087        }
088        
089        public String getJavaInitializationString() {
090            URLPainter painter = (URLPainter)getValue();
091            return painter == null ? "null" : 
092                "new org.jdesktop.swingx.painter.FilePainter(\""+
093                    painter.getURL().toString()+"\")";
094        }
095    
096        public boolean supportsCustomEditor() {
097            return true;
098        }
099        
100        public Component getCustomEditor() {
101            return picker;
102        }
103    }