⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genericbeaninfo.java

📁 SWING的界面UI包 SWING的界面UI包
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * GenericBeanInfo.java
 *
 * Created on 2007年8月12日, 下午8:47
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package dyno.swing.designer.beaninfo;

import dyno.swing.designer.beans.Util;
import dyno.swing.designer.properties.items.ItemProvider;
import dyno.swing.designer.properties.wrappers.ColorWrapper;
import dyno.swing.designer.properties.wrappers.Decoder;
import dyno.swing.designer.properties.wrappers.FontWrapper;
import dyno.swing.designer.properties.wrappers.InsetsWrapper;
import dyno.swing.designer.properties.wrappers.ItemWrapper;
import dyno.swing.designer.properties.wrappers.primitive.BooleanWrapper;
import dyno.swing.designer.properties.wrappers.primitive.ByteWrapper;
import dyno.swing.designer.properties.wrappers.primitive.CharWrapper;
import dyno.swing.designer.properties.wrappers.primitive.DoubleWrapper;
import dyno.swing.designer.properties.wrappers.primitive.FloatWrapper;
import dyno.swing.designer.properties.wrappers.primitive.IntegerWrapper;
import dyno.swing.designer.properties.wrappers.primitive.LongWrapper;
import dyno.swing.designer.properties.wrappers.primitive.ShortWrapper;
import dyno.swing.designer.properties.wrappers.primitive.StringWrapper;
import java.awt.Color;
import java.awt.Font;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.awt.Image;
import java.awt.Insets;
import java.beans.BeanDescriptor;
import java.beans.BeanInfo;
import java.beans.Beans;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.beans.SimpleBeanInfo;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Properties;
import javax.xml.parsers.DocumentBuilderFactory;


/**
 *
 * @author William Chen
 */
public abstract class GenericBeanInfo extends SimpleBeanInfo {

    private static String[] lnf_names = {"Windows", "Metal", "JGoodies Plastic 3D", "JGoodies Plastic XP"};
    private static HashMap<Class, Decoder> decoders;
    private static HashMap<String, BeanInfoDesc> beanInfoDescs;
    static {
        initBeanInfoDescs();
        initTypeDecoders();
    }

    private static void initTypeDecoders() {
        decoders = new HashMap<Class, Decoder>();
        decoders.put(byte.class, new ByteWrapper());
        decoders.put(short.class, new ShortWrapper());
        decoders.put(char.class, new CharWrapper());
        decoders.put(int.class, new IntegerWrapper());
        decoders.put(long.class, new LongWrapper());
        decoders.put(float.class, new FloatWrapper());
        decoders.put(double.class, new DoubleWrapper());
        decoders.put(boolean.class, new BooleanWrapper());
        decoders.put(String.class, new StringWrapper());
        decoders.put(Color.class, new ColorWrapper());
        decoders.put(Font.class, new FontWrapper());
        decoders.put(Insets.class, new InsetsWrapper());
    }
    private Class beanClass;
    private boolean isabstract;
    private BeanDescriptor beanDescriptor;
    private Image icon16;
    private Image icon32;

    /** Creates a new instance of JButtonBeanInfo */
    public GenericBeanInfo() {
        try {
            beanClass = getBeanClass();
            beanDescriptor = new BeanDescriptor(beanClass);
            initBeanProperties();
            String isAbstract = (String) beanDescriptor.getValue("abstract");
            isabstract = isAbstract != null && isAbstract.equals("true");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private static void parseBeaninfo(Element eBeaninfo) {
        String classname = eBeaninfo.getAttribute("class");
        String resourceName = eBeaninfo.getAttribute("resource");
        ArrayList<PropertyDesc> array = new ArrayList<PropertyDesc>();
        NodeList list = eBeaninfo.getElementsByTagName("property");

        if ((list != null) && (list.getLength() > 0)) {
            for (int i = 0; i < list.getLength(); i++) {
                Element eProperty = (Element) list.item(i);
                PropertyDesc prop = new PropertyDesc();
                prop.setPropertyName(eProperty.getAttribute("name"));

                String pcn = eProperty.getAttribute("editor");

                if ((pcn != null) && (pcn.trim().length() > 0)) {
                    prop.setPropertyEditor(pcn.trim());
                }


                NodeList defaultList = eProperty.getElementsByTagName("default");
                if ((defaultList != null) && (defaultList.getLength() > 0)) {
                    ArrayList<Element> defaults = new ArrayList<Element>();
                    for (int j = 0; j < defaultList.getLength(); j++) {
                        Element eDefault = (Element) defaultList.item(j);
                        defaults.add(eDefault);
                    }
                    prop.setDefaults(defaults);
                }

                Properties properties = parseProperties(eProperty);
                prop.setProperties(properties);
                array.add(prop);
            }
        }

        PropertyDesc[] props = array.toArray(new PropertyDesc[0]);
        BeanInfoDesc desc = new BeanInfoDesc();
        Properties properties = parseProperties(eBeaninfo);
        desc.setClassname(classname);
        desc.setProperties(props);
        desc.setResourceName(resourceName);
        desc.setBeanProperties(properties);
        beanInfoDescs.put(classname, desc);
    }

    private static void parseBeanInfos(Element eBeaninfos) {
        NodeList list = eBeaninfos.getElementsByTagName("beaninfo");

        if ((list != null) && (list.getLength() > 0)) {
            for (int i = 0; i < list.getLength(); i++) {
                Element eBeaninfo = (Element) list.item(i);
                parseBeaninfo(eBeaninfo);
            }
        }
    }

    private static void initBeanInfoDescs() {
        try {
            beanInfoDescs = new HashMap<String, BeanInfoDesc>();

            InputStream input = GenericBeanInfo.class.getResourceAsStream("beaninfo.xml");
            Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input);
            Element eBeaninfos = document.getDocumentElement();
            parseBeanInfos(eBeaninfos);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private BeanInfoDesc getBeanInfoDesc(Class beanClass) {
        BeanInfoDesc biDesc = beanInfoDescs.get(beanClass.getName());
        if (biDesc == null) {
            Class beanInfoClass = getClass();
            String bicName = beanInfoClass.getName();
            String name = bicName;
            int dot = bicName.lastIndexOf('.');
            if (dot != -1) {
                name = bicName.substring(dot + 1);
            }
            try {
                InputStream bis = beanInfoClass.getResourceAsStream(name + ".xml");
                if (bis != null) {
                    Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(bis);
                    Element eBeaninfos = document.getDocumentElement();
                    parseBeanInfos(eBeaninfos);
                    biDesc = beanInfoDescs.get(beanClass.getName());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return biDesc;
    }

    private void initBeanProperties() {
        BeanInfoDesc desc = getBeanInfoDesc(beanClass);

        if (desc != null) {
            Properties props = desc.getBeanProperties();
            Enumeration names = props.propertyNames();

            while (names.hasMoreElements()) {
                String key = (String) names.nextElement();
                beanDescriptor.setValue(key, props.get(key));
            }
        }
    }

    public BeanDescriptor getBeanDescriptor() {
        return beanDescriptor;
    }

    public Image getIcon(int iconKind) {
        if ((iconKind == ICON_COLOR_16x16) || (iconKind == ICON_MONO_16x16)) {
            if (icon16 == null) {
                BeanInfoDesc desc = getBeanInfoDesc(beanClass);

                if (desc != null) {
                    String resource = "resources/" + desc.getResourceName() + "_16.png";
                    icon16 = super.loadImage(resource);
                }
            }

            return icon16;
        } else {
            if (icon32 == null) {
                BeanInfoDesc desc = getBeanInfoDesc(beanClass);

                if (desc != null) {
                    String resource = "resources/" + desc.getResourceName() + "_32.png";
                    icon32 = super.loadImage(resource);
                }
            }

            return icon32;
        }
    }

    private PropertyDescriptor cloneProperty(PropertyDescriptor source) {
        try {
            String propertyName = source.getName();
            PropertyDescriptor prop = new PropertyDescriptor(propertyName, beanClass);

            Class clazz = source.getPropertyEditorClass();
            if (clazz != null) {
                prop.setPropertyEditorClass(clazz);
            }
            String desc = source.getShortDescription();
            if (!Util.isStringNull(desc)) {
                prop.setShortDescription(desc);
            }
            Enumeration names = source.attributeNames();

            while (names.hasMoreElements()) {
                String key = (String) names.nextElement();
                Object value = source.getValue(key);
                if (value != null) {
                    prop.setValue(key, value);
                }
            }

            prop.setValue("bean-class", beanDescriptor.getBeanClass());
            return prop;
        } catch (Exception ex) {
            return null;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -