`

下拉框自定义

 
阅读更多

自定义下拉组件

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
/**
 * 下拉框
 * @author luojialin
 * @2014-2014-3-10 下午12:22:55
 */
public class EFComboBox extends JComboBox{

	/**
	 * 是否启用缓存,默认选 false
	 */
	private boolean cache = false;
	/**
	 * 是否启用默认选项“--请选择--”,默认为false
	 */
	private boolean defaultItem = false;

	/**
	 * 数据模型
	 */
	private ComboBoxModel comboBoxModel = new DefaultComboBoxModel();

	/**
	 * 数据源
	 */
	private Object datasource;

	/**服务 名称 ***/
	private String code;
	
	public SFComboBox(){
		super();
	}
	
	public EFComboBox(ComboBoxModel aModel) {
        super(aModel);
	 }
	
	/**
	 * @param serviceName  服务名称
	 */
	public EFComboBox(String serviceName){

		this(serviceName,false);
	}
	
	/**
	 * @param serviceName  服务名称
	 */
	public EFComboBox(boolean defaultItem){

		this("",defaultItem);
	}
	
	/**
	 * @param serviceName 服务名称
	 * @param useDefault 是否开启默认选项
	 */
	public EFComboBox(String serviceName,boolean defaultItem){
		
		super();
		setDefaultItem(defaultItem);
		setCode(serviceName);
		
	}
	
	public EFComboBox(List<Object> list){
		super();
		setDatasource(list);
	}
	
	public EFComboBox(Vector<?> v){
		super(v);
	}
	
	public EFComboBox(Object items[]){
		super(items);
	}

	
	public Object getDatasource() {
		return datasource;
	}

	/**
	 * 通过指定的Key 进行 选中选项
	 * @param key
	 */
	public void setSelectedItem(String key){
		
		for (int i = 0; i < dataModel.getSize(); i++) {
			Object element = dataModel.getElementAt(i);
			if(element instanceof IOption && key != null){
				if(key.equals(((IOption)element).getKey())){
					dataModel.setSelectedItem(element);
					break;
				}
		    }

			if (selectedItemReminder != dataModel.getSelectedItem()) {
				// in case a users implementation of ComboBoxModel
				// doesn't fire a ListDataEvent when the selection
				// changes.
				selectedItemChanged();
		    }
		}
		fireActionEvent();
		
		
	}
	
	 public void setSelectedItem(Object anObject) {
			Object oldSelection = selectedItemReminder;
		        Object objectToSelect = anObject;
			if (oldSelection == null || !oldSelection.equals(anObject)) {

			    if (anObject != null && !isEditable()) {
					// For non editable combo boxes, an invalid selection
					// will be rejected.
					boolean found = false;
					for (int i = 0; i < dataModel.getSize(); i++) {
			            
						Object element = dataModel.getElementAt(i);
					    if (anObject.equals(element)) {
					    	found = true;
			                objectToSelect = element;
			                break;
					    }
					}
					if (!found) {
					    return;
					}
			    }
			    
			    dataModel.setSelectedItem(objectToSelect);

			    if (selectedItemReminder != dataModel.getSelectedItem()) {
				// in case a users implementation of ComboBoxModel
				// doesn't fire a ListDataEvent when the selection
				// changes.
				selectedItemChanged();
			    }
			}
			fireActionEvent();
		    }
	
	/**
	 * 设置 数据源</p>
	 * 
	 * @param datasourec <List>\<Vector>\<Array>
	 */
	public void setDatasource(Object datasourec) {
		this.datasource = datasourec;
		if(datasource instanceof List){
			List list = (List)datasource;
			if(list != null && list.size()>0){
				
				comboBoxModel = new DefaultComboBoxModel(list.toArray());
				this.setModel(comboBoxModel);
			}
		}else if(datasource instanceof Vector){
			Vector v = (Vector)datasource;
			if(v != null && v.size()>0){
				comboBoxModel = new DefaultComboBoxModel(v);
				this.setModel(comboBoxModel);
			}
		}else if(datasource.getClass().isArray()){
			Object[] items = (Object[]) datasource;
			comboBoxModel = new DefaultComboBoxModel(items);
			this.setModel(comboBoxModel);
		}
		
	}
	

	/**
	 * 加载数据(目前只针对 通用下拉框)
	 */
	public void loadData(){
		//TODO 这里将来会取用户选择的语言配置文件
		PCSSLocale currentLocale=PCSSLocale.CN_MAINLAND;
		
		//数据源
		List<IOption> list=ClientCache.getValidOptionsByCode(code);
		if(list != null && !list.isEmpty()){
			//Locale locale = SystemUtlis.LOCALE_ARRAY[lang];
			List<IOption> currentList = new ArrayList<IOption>();
			if(defaultItem == true){
				currentList.add(UIConstants.DEFAULT_EMPTY_OPTION);
			}
			for(IOption op :list){
				currentList.add(op.changeDefaultValueTo(currentLocale));
			}
			
			setDatasource(currentList);
		}
		
	}

	public boolean isCache() {
		return cache;
	}


	public void setCache(boolean cache) {
		this.cache = cache;
	}


	public ComboBoxModel getComboBoxModel() {
		return comboBoxModel;
	}


	public void setComboBoxModel(ComboBoxModel comboBoxModel) {
		this.comboBoxModel = comboBoxModel;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
		//数据查询
		loadData();
	}
	
	public void setCode(String code,boolean defaultItem) {
		this.code = code;
		this.defaultItem = defaultItem;
		//数据查询
		loadData();
	}

	public void setDefaultItem(boolean defaultItem) {
		this.defaultItem = defaultItem;
	}
}

 

分享到:
评论

相关推荐

    ASP.NET多选下拉框自定义控件

    综上所述,创建ASP.NET多选下拉框自定义控件是一个结合了服务器端编程、客户端脚本和Ajax技术的过程,目的是提供更好的用户体验和更高效的页面交互。通过这样的自定义控件,我们可以更好地满足项目需求,提高用户...

    美化下拉框自定义插件

    总结来说,“美化下拉框自定义插件”是一个基于jQuery的解决方案,它提供了美观的界面和强大的功能,包括获取value值和使用回调函数。通过这个插件,开发者可以快速地创建符合设计要求的下拉框,同时保证交互体验的...

    JSF加入Ajax功能的下拉框自定义组件(含源代码)

    JSF加入Ajax功能的下拉框自定义组件,含源代码。

    安卓QQ相关相关-Android实现仿QQ登录可编辑下拉框自定义spinner.rar

    这个“安卓QQ相关相关-Android实现仿QQ登录可编辑下拉框自定义spinner.rar”压缩包文件就是一个实例,展示了如何在Android应用中创建一个类似于QQ登录界面的可编辑下拉框,即自定义Spinner。以下将详细讲解实现此类...

    下拉框自定义标签

    下拉框自定义标签允许开发者创建可重用的组件,提高代码的可维护性和可读性。这个主题涉及到JavaServer Pages(JSP)、自定义标签库(Tag Library)和JavaBeans等技术。 首先,我们要理解什么是JSP自定义标签。在...

    带checkbox的下拉框

    4. **样式和自定义**: - **图标和文字**:使用图标与文字结合的方式展示选项,增加视觉效果。 - **主题定制**:根据产品设计风格,调整下拉框的颜色、大小、边框等样式。 - **动画效果**:打开和关闭下拉框时...

    jQGrid动态填充select下拉框的选项值(动态填充)

    在某些场景下,我们需要动态地填充select下拉框的选项值,以实现更灵活的数据输入。本篇文章将详细探讨如何在jQGrid中实现这一功能。 首先,理解`select`下拉框的基本概念。在HTML中,`&lt;select&gt;`元素用于创建一个...

    PB9下拉多选自定义控件(源码)

    通过读取数据表生成一个可供多选的下拉列表控件,要求数据表中至少要有“编码”和“名称”两个字段,字段名任意。并且“编码”字段是主键,字符型或数字值都可以。 使用示例: uo_1.i_sqlselect='from demotab'//这...

    select 分组下拉菜单自定义样式

    本话题将深入探讨如何自定义`select`分组下拉菜单的样式,以实现更美观且功能丰富的交互效果。 首先,我们需要了解`&lt;select&gt;`的基本结构。一个带有分组的`select`通常会包含`&lt;optgroup&gt;`元素来创建选项组,以及`...

    QComboBox+QListWidget实现自定义ComboBox

    在某些情况下,我们可能需要自定义QComboBox,比如添加更复杂的内容或交互,这时可以结合使用这两者来实现。下面将详细解释如何利用QComboBox和QListWidget实现自定义ComboBox,并介绍相关知识点。 首先,我们需要...

    几种多选下拉框的代码

    3. `datagrid.css`和`datagrid.js`(如果需要自定义样式和功能):这些文件针对数据展示和操作提供了额外的样式和脚本。 在HTML中,你可以使用`&lt;select multiple class="easyui-combobox"&gt;`来创建一个多选下拉框。...

    Qt Quick自定义下拉框

    在Qt Quick中,自定义下拉框(Combobox)是一种常见的UI组件,它允许用户从一组预设选项中选择一个。QML(Qt Meta Language)是Qt框架的一部分,用于构建Qt Quick应用程序的声明式语言。在QML中,我们可以轻松地...

    jQuery自定义下拉框 jQuery自定义下拉框网页特效.zip

    本资源"jQuery自定义下拉框 jQuery自定义下拉框网页特效.zip"显然包含了一个使用jQuery实现的自定义下拉框效果,适用于提升网页的用户体验和视觉吸引力。 首先,我们要理解CSS在自定义下拉框中的作用。CSS(层叠...

    Swing控件,多选下拉框

    要实现多选下拉框功能,我们需要自定义组件或者使用第三方库来扩展`JComboBox`的功能。 ### 一、自定义多选下拉框 自定义多选下拉框通常涉及以下几个关键步骤: 1. **创建自定义模型**:你需要创建一个自定义的`...

    自定义下拉框(android)

    在Android开发中,自定义下拉框是一种常见的需求,它能提供更加个性化和丰富的交互体验。本教程将深入探讨如何在Android中实现一个仿WEB风格的自定义下拉框(Spinner)。我们将主要围绕以下几个知识点展开: 1. **...

    C# 自定义带搜索下拉框

    在C#编程中,自定义带搜索功能的下拉框是一种常见的需求,它能提供更加高效和便捷的用户交互体验。系统自带的下拉框(ComboBox)虽然简单易用,但在处理大量数据时,如果没有搜索功能,用户可能需要滚动浏览整个列表...

    C#自定义ComboBox下拉框

    这个自定义ComboBox下拉框的主要特点包括: 1. **复选框集成**:在下拉列表的每一项中都包含了复选框,用户可以勾选多个选项,这对于需要多选的场景非常有用。例如,用户可能需要从一组类别中选择多个标签或者兴趣...

    Ueditor自定义下拉框问题

    ### Ueditor自定义下拉框及功能操作详解 #### 一、概述 Ueditor是一款由百度推出的开源富文本编辑器,具有丰富的插件和高度可定制化的特性,被广泛应用于各类网站后台管理系统中。本文主要讲解如何在Ueditor中添加...

    自定义下拉列表

    在Android开发中,自定义下拉列表是一种常见的交互方式,用于提供用户选择多个选项的界面。本主题将深入探讨如何使用PopupWindow来实现一个自定义的下拉列表,使其宽度与触发它的控件(通常是Spinner)保持一致,...

Global site tag (gtag.js) - Google Analytics