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

📄 propertygroupmodel.java

📁 SWING的界面UI包 SWING的界面UI包
💻 JAVA
字号:
/*
 * DefaultBeanPropertyModel.java
 *
 * Created on 2007??8??13??, ????12:46
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package dyno.swing.designer.properties;

import dyno.swing.designer.beans.GroupModel;
import dyno.swing.designer.beans.SwingDesigner;
import dyno.swing.designer.beans.Util;
import dyno.swing.designer.properties.editors.ExtendedPropertyEditor;
import dyno.swing.designer.properties.editors.accessibles.AccessiblePropertyEditor;
import dyno.swing.designer.properties.editors.accessibles.BaseAccessibleEditor;
import dyno.swing.designer.properties.editors.ItemCellEditor;
import dyno.swing.designer.properties.renderer.EncoderCellRenderer;
import dyno.swing.designer.properties.items.ItemProvider;
import dyno.swing.designer.properties.wrappers.Decoder;
import dyno.swing.designer.properties.wrappers.ItemWrapper;
import dyno.swing.designer.properties.wrappers.Encoder;
import java.awt.Component;
import java.beans.Beans;
import java.beans.PropertyDescriptor;
import java.beans.PropertyEditor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;


/**
 *
 * @author William Chen
 */
public class PropertyGroupModel implements GroupModel, Comparable<PropertyGroupModel> {

    protected Object bean;
    protected PropertyDescriptor[] properties;
    protected TableCellRenderer[] renderers;
    protected PropertyCellEditor[] editors;
    protected String groupName;
    protected SwingDesigner designer;

    /** Creates a new instance of DefaultBeanPropertyModel */
    public PropertyGroupModel(String name, Object bean, SwingDesigner designer, PropertyDescriptor[] props) {
        this.groupName = name;
        this.bean = bean;
        this.designer = designer;
        this.properties = props; //beanInfo.getPropertyDescriptors();
        renderers = new TableCellRenderer[properties.length];
        editors = new PropertyCellEditor[properties.length];
    }

    public int getRowCount() {
        return properties.length;
    }

    public TableCellRenderer getRenderer(int row) {
        if (renderers[row] == null) {
            initRenderer(row);
        }
        if (renderers[row] != null && renderers[row] instanceof PropertyContext) {
            PropertyContext context = (PropertyContext) renderers[row];
            context.setBean(bean);
            context.setSwingDesigner(designer);
        }
        return renderers[row];
    }

    public TableCellEditor getEditor(int row) {
        if (editors[row] == null) {
            initEditor(row);
        }

        if (editors[row] != null) {
            editors[row].setBean(bean);
            editors[row].setSwingDesigner(designer);
        }

        return editors[row];
    }

    private boolean isComponentNameProperty(int row) {
        return properties[row].getName().equals("name") && bean instanceof Component;
    }

    public Object getValue(int row, int column) {
        if (column == 0) {
            return properties[row].getName();
        }
        if (isComponentNameProperty(row)) {
            return Util.getComponentName((Component) bean);
        } else {
            try {
                Method m = properties[row].getReadMethod();
                return m.invoke(bean);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    }

    public boolean setValue(Object value, int row, int column) {
        if (column == 0) {
            return false;
        }

        try {
            Method m = properties[row].getWriteMethod();
            m.invoke(bean, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public boolean isEditable(int row) {
        if (bean instanceof Component) {
            if (properties[row].getName().equals("name")) {
                boolean isRoot = Util.isRootComponent((Component) bean);
                return !isRoot;
            }
        }
        boolean writable = properties[row].getWriteMethod() != null;
        return writable;
    }

    public void setBean(Object bean) {
        this.bean = bean;
    }

    private void initRenderer(int row) {
        try {
            String sRenderer = (String) properties[row].getValue(
                    "renderer");

            if (!Util.isStringNull(sRenderer)) {
                renderers[row] = (TableCellRenderer) Beans.instantiate(this.getClass()
                                                                           .getClassLoader(),
                        sRenderer);
            } else {
                String encoderString = (String) properties[row].getValue(
                    "encoder");
                if (!Util.isStringNull(encoderString)) {
                    Encoder wrapper = (Encoder) Beans.instantiate(this.getClass()
                                                                           .getClassLoader(),
                        encoderString);
                    renderers[row] = new EncoderCellRenderer(wrapper);
                } else {
                    String itemString = (String) properties[row].getValue(
                    "items");
                    if (!Util.isStringNull(itemString)) {
                        ItemProvider provider = (ItemProvider) Beans.instantiate(this.getClass()
                                                                           .getClassLoader(),
                        itemString);
                        ItemWrapper wrapper = new ItemWrapper(provider);
                        renderers[row] = new EncoderCellRenderer(wrapper);
                    } else {
                        Class propType = properties[row].getPropertyType();
                        Class<? extends TableCellRenderer> rendererClass = Util.getTableCellRendererClass(propType);

                        if (rendererClass != null) {
                            renderers[row] = rendererClass.newInstance();
                        } else {
                            Class<? extends PropertyEditor> editorClass = (Class<PropertyEditor>) properties[row].getPropertyEditorClass();

                            if (editorClass == null) {
                                editorClass = Util.getPropertyEditorClass(propType);
                            }

                            if (editorClass == null) {
                                renderers[row] = new DefaultTableCellRenderer();
                            } else {
                                PropertyEditor editor = editorClass.newInstance();
                                renderers[row] = new PropertyCellRenderer(editor);
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void initEditor(int row) {
        try {
            Class<? extends PropertyEditor> editorClass = (Class<PropertyEditor>) properties[row].getPropertyEditorClass();
            Object defaultValue=Util.getDefaultValue(designer.getDesignLnf(), properties[row]);
            if (editorClass == null) {
                String encoderString = (String) properties[row].getValue("encoder");
                String decoderString = (String) properties[row].getValue("decoder");
                if (!(Util.isStringNull(encoderString) || Util.isStringNull(decoderString))) {
                    Decoder decoder = (Decoder) Beans.instantiate(this.getClass()
                                                                           .getClassLoader(),
                        decoderString);
                    Encoder encoder = (Encoder) Beans.instantiate(this.getClass()
                                                                           .getClassLoader(),
                        encoderString);
                    BaseAccessibleEditor bae = new BaseAccessibleEditor(encoder, decoder, false);
                    AccessiblePropertyEditor ape = new AccessiblePropertyEditor(bae);
                    ape.setDefaultValue(defaultValue);
                    editors[row] = new PropertyCellEditor(properties[row], ape);
                    return;
                } else {
                    String itemString = (String) properties[row].getValue(
                    "items");
                    if (!Util.isStringNull(itemString)) {
                        ItemProvider provider = (ItemProvider) Beans.instantiate(this.getClass()
                                                                           .getClassLoader(),
                        itemString);
                        ItemCellEditor ice=new ItemCellEditor(provider);
                        ice.setDefaultValue(defaultValue);
                        editors[row] = new PropertyCellEditor(properties[row], ice);
                        return;
                    } else {
                        Class propType = properties[row].getPropertyType();
                        editorClass = Util.getPropertyEditorClass(propType);
                    }
                }
            }

            if (editorClass != null) {
                PropertyEditor editor = editorClass.newInstance();
                if(editor instanceof ExtendedPropertyEditor)
                    ((ExtendedPropertyEditor)editor).setDefaultValue(defaultValue);
                editors[row] = new PropertyCellEditor(properties[row], editor);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String getGroupName() {
        return groupName;
    }

    public int compareTo(PropertyGroupModel gm) {
        int firstIndex = PROPERTIES.indexOf(groupName);
        int lastIndex = PROPERTIES.indexOf(gm.getGroupName());
        if (firstIndex < lastIndex) {
            return -1;
        } else if (firstIndex == lastIndex) {
            return 0;
        } else {
            return 1;
        }
    }
    private static ArrayList<String> PROPERTIES = new ArrayList<String>();
    static {
        PROPERTIES.add("Properties");
        PROPERTIES.add("Others");
    }

    public boolean isValueSet(int row) {
        return Util.isPropertyChanged(designer.getDesignLnf(), bean, properties[row]);
    }

    public boolean restoreDefaultValue(int row) {
        Object default_value=Util.getDefaultValue(designer.getDesignLnf(), properties[row]);
        return setValue(default_value, row, 1);
    }

    public String getPropertyDescription(int row) {
        return properties[row].getShortDescription();
    }
}

⌨️ 快捷键说明

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