下拉框自定义

自定义下拉组件

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;
	}
}

猜你喜欢

转载自gxblluojialin.iteye.com/blog/2039495
今日推荐