`
fordream
  • 浏览: 62762 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Swing JComboBox实现键值

阅读更多

  之前用Swing写一个辅助工具项目,发现Swing的JComboBox竟然不能直接支持键值对的形式,很郁闷.

最好自己只能扩展JComboBox.

import java.awt.Component;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

public class KeyValComboBox extends JComboBox{

    public KeyValComboBox(Vector values){
          super(values);
          rendererData(); //渲染数据
    }
    
     public void rendererData(){
          ListCellRenderer render = new DefautlListCellRenderer(){
               public Component getListCellRendererComponent(JList list,Object value, int index, boolean isSelected, boolean cellHasFocus){
                   super.getListCellRendererComponent(list, value, indx, isSelected, cellHasFocus);
                   if (value instanceof CheckBoxPo){
                        CheckBoxPo po = (CheckBoxPo) value;
                        this.setText(po.text);
                   }
                   return this;
               }
          };
          this.setRenderer(render);
     }

    //修改Combox中的数据
     pulbic void updateData(Vector values){
          setModel(new DefaultComboBoxModel(values));
          rendererData();
     }
    
     @Override
      public void setSelectedItem(Object anObject){ //选中text与传入的参数相同的项
          if (anObject != null){
               if (anObject instanceof CheckBoxPo){
                     super.setSelectedItem(anObject);
               }
               if(anObject instanceof String){
                     for (int index = 0; index < getItemCount(); index++){
                            CheckBoxPo po = (CheckBoxPo) getItemAt(index);
                            if (po.text.equals(anObject.toString())){
                                   super.setSelectedIndex(index);
                            }
                     }
               }
          }else{
                 super.setSelectedItem(anObject);
          }
      }
      
      public void setSelectedValue(Object anObject){ //选中value与传入的参数相同的项
          if(anObject != null){
              if(anObject instanceof CheckBoxPo){
                    super.setSelectedItem(anObject);
              }
              if(anObject instanceof String){
                    for(int index = 0; index < getItemCount(); index++){
                         CheckBoxPo po = (CheckBoxPo) getItemAt(index);
                         if(po.value.equals(anObject.toString())){
                             super.setSelectedIndex(index);
                         }
                    }
              }
          }else{
               super.setSelectedItem(anObject);
          }
      }

      //获得选中项的键值
    public String getSelectedValue(){
           if(getSelectedItem() instaceof CheckBoxPo){
                CheckBoxPo po = (CheckBoxPo)getSelectItem();
                return po.value;
           }
           return (getSelectedItem != null) ? getSelectedItem.toString() : null;
      }

      //获得选中项的显示文本
    public String getSelectedText(){
             if(getSelectedItem() instaceof CheckBoxPo){
                CheckBoxPo po = (CheckBoxPo)getSelectItem();
                return po.text;
           }
           return (getSelectedItem != null) ? getSelectedItem.toString() : null;
      }
}

 

public class CheckBoxPo{
     public String value = null; 
     public String text= null;

     public CheckBoxPo(){}

     public CheckBoxPo(String value,String text){
         this.value = value;
         this.text = text;
     }
}

 

使用方法:

public KeyValComboBox getCboUpdateRule(){
       if(cboUpdateRule == null){
           Vector values = new Vector();
           CheckBoxPo po = null;
           for(int i = 0 ; i < 5; i++){
               po = new CheckBoxPo();
               po.value = i;
               po.text = "选项"+i;
               values.add(po);
           }
          
          cboUpdateRule = new KeyValComboBox(values);
       }
}

 

1
1
分享到:
评论
4 楼 2157524 2017-11-01  
有几个地方单词写错了     我把自己修正过后的重新弄了一遍
作者一个一个对着敲的话 确实蛋疼
3 楼 2157524 2017-11-01  

import java.awt.Component;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

public class TestModel extends  JComboBox<UtilsData>{

/**
*
*/
private static final long serialVersionUID = 1L;

public TestModel (Vector<UtilsData> values){ 
         super(values); 
         rendererData(); //渲染数据 
   } 
    
   public void rendererData(){ 
          ListCellRenderer render = new DefaultListCellRenderer(){ 
               public Component getListCellRendererComponent(JList list,Object value, int index, boolean isSelected, boolean cellHasFocus){ 
                   super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
                   if (value instanceof UtilsData){ 
                        UtilsData po = (UtilsData) value; 
                        this.setText(po.getName()); 
                   } 
                   return this; 
               } 
          }; 
          this.setRenderer(render); 
     } 

   //修改Combox中的数据 
    public void updateData(Vector values){ 
         setModel(new DefaultComboBoxModel<UtilsData>(values)); 
         rendererData(); 
    } 
    
    @Override 
     public void setSelectedItem(Object anObject){ //选中name与传入的参数相同的项 
         if (anObject != null){ 
              if (anObject instanceof UtilsData){ 
                    super.setSelectedItem(anObject); 
              } 
              if(anObject instanceof String){ 
                    for (int index = 0; index < getItemCount(); index++){ 
                           UtilsData po = (UtilsData) getItemAt(index); 
                           if (po.getName().equals(anObject.toString())){ 
                                  super.setSelectedIndex(index); 
                           } 
                    } 
              } 
         }else{ 
                super.setSelectedItem(anObject); 
         } 
     } 
      
     public void setSelectedValue(Object anObject){ //选中value与传入的参数相同的项 
         if(anObject != null){ 
             if(anObject instanceof UtilsData){ 
                   super.setSelectedItem(anObject); 
             } 
             if(anObject instanceof String){ 
                   for(int index = 0; index < getItemCount(); index++){ 
                        UtilsData po = (UtilsData) getItemAt(index); 
                        if(po.getCode().equals(anObject.toString())){ 
                            super.setSelectedIndex(index); 
                        } 
                   } 
             } 
         }else{ 
              super.setSelectedItem(anObject); 
         } 
     } 

     //获得选中项的键值 
   public String getSelectedValue(){ 
          if(getSelectedItem() instanceof UtilsData){ 
               UtilsData po = (UtilsData)getSelectedItem(); 
               return po.getCode(); 
          } 
          return (getSelectedItem() != null) ? getSelectedItem().toString() : null; 
     } 

     //获得选中项的显示文本 
   public String getSelectedname(){ 
            if(getSelectedItem() instanceof UtilsData){ 
               UtilsData po = (UtilsData)getSelectedItem(); 
               return po.getName(); 
          } 
          return (getSelectedItem() != null) ? getSelectedItem().toString() : null; 
     } 


}

package cn.airflite.client.model.basedatamanagement.stationcombobox;

public class UtilsData {


public UtilsData(String code, String name) {

this.code = code;
this.name = name;
}
private String code;
private String name;


public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}

2 楼 fordream 2012-07-25  
japankn 写道
写的什么玩意32行还有错,public,OK?运行还有问题,唉,失败~~~


不好意思,这些功能都是在公司机器上实现的,但是公司的内网与外网错开的。不能拷贝,我就对着代码一个个输到到博客上面,可能不少地方输错了。这只是给大家提供个思路,不一定要完全拷贝代码过去。
1 楼 japankn 2012-04-05  
写的什么玩意32行还有错,public,OK?运行还有问题,唉,失败~~~

相关推荐

Global site tag (gtag.js) - Google Analytics