`
fordream
  • 浏览: 63473 次
  • 性别: 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?运行还有问题,唉,失败~~~

相关推荐

    Java_swing

    通常我们会用HashMap来实现,因为它的键值对结构方便我们快速查找和关联数据。 1. 首先,加载省份数据到JComboBox1,可以通过ArrayList或Vector存储省份,然后用DefaultComboBoxModel作为模型添加到JComboBox。 ```...

    二级联动代码

    此代码实现了一个基于Java Swing框架的简单二级联动选择器,通过`JComboBox`组件和`HashMap`数据结构来实现这一功能。 详细解析: ### 代码解读 #### 引入包与类 首先,代码导入了多个Java类库,包括`java.awt....

    Java开发自学100天,Java开发必背代码 使用Map映射集合实现省市级联选项框功能

    import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.*; public class ProvinceCityComboBoxExample { private JFrame ...

    java编程基础

    Map接口的实现如HashMap和Hashtable,用于存储键值对,而Set接口的实现如HashSet和TreeSet则存储唯一元素。 异常处理是Java编程中的重要一环,分为检查性异常(Exception)、运行时异常(RuntimeException)和错误...

    电话簿源码

    1. **Swing组件**:包括JButton(按钮)、JLabel(标签)、JTextField(文本框)、JTextArea(多行文本框)、JList(列表)、JComboBox(下拉框)等,这些都是构建用户界面的基本元素。 2. **事件处理**:使用...

    汇率计算器

    例如,使用`JFrame`作为主窗口,`JLabel`显示提示信息,`JComboBox`或`JRadioButton`选择货币类型,`JTextField`输入金额,以及`JButton`触发转换操作。此外,`JTable`或`JList`可以用来展示完整的汇率表格,便于...

    2021-2022计算机二级等级考试试题及答案No.4807.docx

    24. AWT 和 Swing 组件:AWT 和 Swing 是 Java GUI 开发的两个库,其中 AWT 的 ComboBox 对应 Swing 的 JComboBox,所以 D 选项是错误的,其他选项一一对应。 这些知识点覆盖了计算机科学的基础知识,包括编程语言...

    java小说人物分析.doc

    - **集合**(如`HashMap`):用于存储键值对的数据结构,便于快速查找和更新数据。 - 示例:使用`HashMap`存储人物名称及其出现次数。 #### 排序算法 - 对于人物出现次数及篇幅跨度的排序,可以采用内置的排序方法...

    2021-2022计算机二级等级考试试题及答案No.466.docx

    AWT和Swing是Java编程语言中用于图形用户界面的两个组件库,其中Button和JButton、Dialog和JDialog、MenuBar和JMenuBar是对应的组件,但ComboBox和JComboBox不是对应的组件。 知识点4:PowerPoint演示文稿 ...

    2021-2022计算机二级等级考试试题及答案No.12408.docx

    11. AWT(Abstract Window Toolkit)和Swing是Java GUI库,其中Button与JButton、Dialog与JDialog、MenuBar与JMenuBar分别是AWT与Swing的对应组件,而ComboBox在AWT中没有直接对应组件,Swing中的ComboBox是独立的。...

    2021-2022计算机二级等级考试试题及答案No.17911.docx

    4. AWT(Abstract Window Toolkit)和 Swing 是 Java GUI 开发的两个库,AWT 组件对应 Swing 组件的一对中,ComboBox 和 JComboBox 是错误的对应,因为它们在 Swing 中就是同一个组件,都是 JComboBox。 5. 正确...

    Java范例开发大全 (源程序)

     实例221 改变Properties文件中的键值 399  第13章 多线程编程(教学视频:121分钟) 405  13.1 多线程的五种基本状态 405  实例222 启动线程 405  实例223 参赛者的比赛生活(线程休眠唤醒) 407  实例...

    java范例开发大全(pdf&源码)

    实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载...

    java范例开发大全源代码

     实例163 使用抽象方法实现的支票夹 254  9.2 封装 257  实例164 世界小姐参赛资格 257  实例165 自定义复数类 261  9.3 继承 264  实例166 轿车与本田的关系 264  实例167 继承关系的加载顺序 ...

    java范例开发大全

    实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载...

    Java范例开发大全(全书源程序)

    实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索...

    DataEntry

    Swing是Java的标准GUI库,包含了各种组件如文本框(JTextField)、组合框(JComboBox)、表格(JTable)等,这些组件能够构建出符合需求的交互式数据录入表单。JavaFX作为更现代的替代方案,提供更为丰富的图形效果...

    2021-2022计算机二级等级考试试题及答案No.1670.docx

    16. **Swing组件布局管理**:JDialog对象可以指定布局管理器,而JScrollBar、JMenuBar和JComboBox通常不直接指定布局管理器,它们可能有自己的默认布局。 17. **剪贴板操作**:剪贴板操作中的“粘贴”是指将剪贴板...

    Java编程基础(2011-2012学年第一学期)复习提纲.doc

    - 键值对集合,不允许重复键。 - 常用实现: `HashMap`, `TreeMap`。 - **Set**: - 无序集合,不允许重复元素。 - 常用实现: `HashSet`, `TreeSet`。 #### 第七章 字符串处理 **1. 字符串常量** - `String` ...

    2021-2022计算机二级等级考试试题及答案No.18120.docx

    11. **AWT和Swing组件**:`ComboBox`在AWT中对应的是`Choice`,而不是`JComboBox`。 12. **VBA语句分隔**:VBA中,多条语句写在一行时,使用冒号(:)作为分隔符。 13. **Word表格**:Word支持创建规则和不规则的...

Global site tag (gtag.js) - Google Analytics