界面加载后,如何动态添加控件原创
金蝶云社区-柒拾贰
柒拾贰
5人赞赏了该文章 2,348次浏览 未经作者许可,禁止转载编辑于2021年08月18日 15:00:06

界面加载后,在点击事件中动态添加控件示例:

  1. 监听按钮的click事件

  2. 在click事件中,获取要装载新控件的容器控件

  3. new一个具体的控件对象并set通用属性

  4. 调用容器控件的addControls方法将新控件放入容器控件中

代码示例:

import java.util.ArrayList;
import java.util.EventObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import kd.bos.dataentity.entity.LocaleString;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.form.ClientActions;
import kd.bos.form.ClientProperties;
import kd.bos.form.IClientViewProxy;
import kd.bos.form.container.Container;
import kd.bos.form.control.Control;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.metadata.form.control.LabelAp;
public class FlexPanelSample extends AbstractFormPlugin {

	private final static String KEY_BUTTON1 = "buttonap1";
	private final static String KEY_FLEXPANEL1 = "contentpanel";
	
	@Override
	public void registerListener(EventObject e) {
		super.registerListener(e);
		this.addClickListeners(KEY_BUTTON1);
	}

	@Override
	public void click(EventObject evt) {
		super.click(evt);
		Control source = (Control) evt.getSource();
		if (StringUtils.equals(KEY_BUTTON1, source.getKey())){
			addLabel("label1");
		}
		
	}
	
	private void addLabel(String labelKey){
		
		Container container = this.getView().getControl(KEY_FLEXPANEL1);
		
		LabelAp label1 = new LabelAp();
		label1.setId(labelKey);
		label1.setKey(labelKey);
		label1.setName(new LocaleString("动态标签"));
		label1.setParentId(KEY_FLEXPANEL1);
		
		List<Map<String, Object>> items = new ArrayList<>();
		items.add(label1.createControl());
		
		container.addControls(items);	

	}
}

注意:由于表单界面加载后数据包已初始化完成,新加字段会导致数据包属性不匹配,因此在初始化界面后只能动态添加无实体的控件,而不能再添加实体字段。

赞 5