这是一个插件控件的开发示例,实现了一个基于ztree的参数树控件。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

132 lines
4.7 KiB

package com.fr.plugin.widget.ztree.ui;
import com.fanruan.api.design.DesignKit;
import com.fanruan.api.design.ui.component.UITextField;
import com.fanruan.api.design.util.GUICoreKit;
import com.fanruan.api.design.work.form.creator.Attribute;
import com.fanruan.api.design.work.form.creator.OpacityButton;
import com.fanruan.api.design.work.form.creator.XFieldCreator;
import com.fanruan.api.design.work.form.editor.impl.WidgetValueEditor;
import com.fanruan.api.design.work.form.macro.XCreatorConstants;
import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWScaleLayout;
import com.fr.plugin.widget.ztree.core.ZTree;
import com.fr.plugin.widget.ztree.ui.editor.ZTreeCascadeEditor;
import com.fr.plugin.widget.ztree.ui.editor.ZTreeModelEditor;
import com.fr.plugin.widget.ztree.ui.editor.ZTreeStyleEditor;
import com.fr.plugin.widget.ztree.ui.renderer.ZTreeCascadeRenderer;
import com.fr.plugin.widget.ztree.ui.renderer.ZTreeModelRenderer;
import com.fr.plugin.widget.ztree.ui.renderer.ZTreeStyleRenderer;
import javax.swing.*;
import java.awt.*;
/**
* Created by richie on 15/11/17.
*/
public class XZTree extends XFieldCreator {
private OpacityButton btn;
public XZTree(ZTree widget, Dimension initSize) {
super(widget, initSize);
}
@Override
public Attribute[] attributes() {
return new Attribute[]{
Attribute.newAttribute("widgetValue", this.toData().getClass()).i18n(
DesignKit.i18nText("Plugin-ZTree_Widget_Value")).editorClass(WidgetValueEditor.class),
Attribute.newAttribute("treeNode", this.toData().getClass()).i18n(
DesignKit.i18nText("Plugin-ZTree_Widget_Data")).editorClass(ZTreeModelEditor.class).rendererClass(
ZTreeModelRenderer.class),
Attribute.newAttribute("popupHeight", this.data.getClass())
.i18n(DesignKit.i18nText("Plugin-ZTree_Widget_Popup_Height"))
.keyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"),
Attribute.newAttribute("selectStyle", this.toData().getClass())
.i18n(DesignKit.i18nText("Plugin-ZTree_Mode"))
.editorClass(ZTreeStyleEditor.class)
.rendererClass(ZTreeStyleRenderer.class)
.keyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"),
Attribute.newAttribute("cascade", this.data.getClass())
.i18n(DesignKit.i18nText("Plugin-ZTree_Cascade"))
.editorClass(ZTreeCascadeEditor.class)
.rendererClass(ZTreeCascadeRenderer.class)
.keyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced")
};
}
protected JComponent initEditor() {
if (editor == null) {
editor = GUICoreKit.createBorderLayoutPane();
UITextField textField = new UITextField(5);
textField.setOpaque(false);
editor.add(textField, BorderLayout.CENTER);
btn = new OpacityButton("", this.getIconPath(), toData().isVisible() ? FULL_OPACITY : HALF_OPACITY);
btn.setPreferredSize(new Dimension(21, 21));
btn.setOpaque(true);
editor.add(btn, BorderLayout.EAST);
editor.setBackground(Color.WHITE);
}
return editor;
}
@Override
public ZTree toData() {
return (ZTree) data;
}
protected void makeVisible(boolean visible) {
btn.makeVisible(visible);
}
/**
* 控件的预定义大小
*
* @return 控件的预定义大小
*/
@Override
public Dimension initEditorSize() {
return SMALL_PREFERRED_SIZE;
}
@Override
public String getIconPath() {
return "/com/fr/plugin/widget/ztree/images/drop_down_tree.png";
}
/**
* 获取当前XCreator的一个封装父容器
*
* @param widgetName 当前组件名
* @return 封装的父容器
* @date 2014-11-25-下午4:47:23
*/
@Override
protected XLayoutContainer getCreatorWrapper(String widgetName) {
return new XWScaleLayout();
}
/**
* 将当前对象添加到父容器中
*
* @param parentPanel 父容器组件
* @date 2014-11-25-下午4:57:55
*/
@Override
protected void addToWrapper(XLayoutContainer parentPanel, int width, int minHeight) {
this.setSize(width, minHeight);
parentPanel.add(this);
}
/**
* 此控件在自适应布局要保持原样高度
*
* @return 是则返回true
*/
@Override
public boolean shouldScaleCreator() {
return true;
}
}