自定义下拉组件
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; } }