之前用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);
}
}
分享到:
相关推荐
通常我们会用HashMap来实现,因为它的键值对结构方便我们快速查找和关联数据。 1. 首先,加载省份数据到JComboBox1,可以通过ArrayList或Vector存储省份,然后用DefaultComboBoxModel作为模型添加到JComboBox。 ```...
此代码实现了一个基于Java Swing框架的简单二级联动选择器,通过`JComboBox`组件和`HashMap`数据结构来实现这一功能。 详细解析: ### 代码解读 #### 引入包与类 首先,代码导入了多个Java类库,包括`java.awt....
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.*; public class ProvinceCityComboBoxExample { private JFrame ...
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`可以用来展示完整的汇率表格,便于...
24. AWT 和 Swing 组件:AWT 和 Swing 是 Java GUI 开发的两个库,其中 AWT 的 ComboBox 对应 Swing 的 JComboBox,所以 D 选项是错误的,其他选项一一对应。 这些知识点覆盖了计算机科学的基础知识,包括编程语言...
- **集合**(如`HashMap`):用于存储键值对的数据结构,便于快速查找和更新数据。 - 示例:使用`HashMap`存储人物名称及其出现次数。 #### 排序算法 - 对于人物出现次数及篇幅跨度的排序,可以采用内置的排序方法...
AWT和Swing是Java编程语言中用于图形用户界面的两个组件库,其中Button和JButton、Dialog和JDialog、MenuBar和JMenuBar是对应的组件,但ComboBox和JComboBox不是对应的组件。 知识点4:PowerPoint演示文稿 ...
11. AWT(Abstract Window Toolkit)和Swing是Java GUI库,其中Button与JButton、Dialog与JDialog、MenuBar与JMenuBar分别是AWT与Swing的对应组件,而ComboBox在AWT中没有直接对应组件,Swing中的ComboBox是独立的。...
4. AWT(Abstract Window Toolkit)和 Swing 是 Java GUI 开发的两个库,AWT 组件对应 Swing 组件的一对中,ComboBox 和 JComboBox 是错误的对应,因为它们在 Swing 中就是同一个组件,都是 JComboBox。 5. 正确...
实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例...
实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载...
实例163 使用抽象方法实现的支票夹 254 9.2 封装 257 实例164 世界小姐参赛资格 257 实例165 自定义复数类 261 9.3 继承 264 实例166 轿车与本田的关系 264 实例167 继承关系的加载顺序 ...
实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载...
实例221 改变Properties文件中的键值 399 第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索...
Swing是Java的标准GUI库,包含了各种组件如文本框(JTextField)、组合框(JComboBox)、表格(JTable)等,这些组件能够构建出符合需求的交互式数据录入表单。JavaFX作为更现代的替代方案,提供更为丰富的图形效果...
16. **Swing组件布局管理**:JDialog对象可以指定布局管理器,而JScrollBar、JMenuBar和JComboBox通常不直接指定布局管理器,它们可能有自己的默认布局。 17. **剪贴板操作**:剪贴板操作中的“粘贴”是指将剪贴板...
- 键值对集合,不允许重复键。 - 常用实现: `HashMap`, `TreeMap`。 - **Set**: - 无序集合,不允许重复元素。 - 常用实现: `HashSet`, `TreeSet`。 #### 第七章 字符串处理 **1. 字符串常量** - `String` ...
11. **AWT和Swing组件**:`ComboBox`在AWT中对应的是`Choice`,而不是`JComboBox`。 12. **VBA语句分隔**:VBA中,多条语句写在一行时,使用冒号(:)作为分隔符。 13. **Word表格**:Word支持创建规则和不规则的...