Swing开发之JComboBox篇

2023-11-09

JList和ComboBox很相似,因为这两个组件都显示一个项列表。因此,它们都有扩展ListModel接口的模型。而且,这两个组件都有绘制器,这些绘制器通过实现ListCellBenderer接口来绘制列表单元。
  但是,列表和组合框在施工方面还是有差别的。列表单是不可编辑的,但是组合框可以配备一个编辑器。JComboBox组件把编辑工作交给实现ComboBoxEdit接口的一个对象来处理。
  列表支持三个选取模式,并把选取工作实现ListSelectionModel接口的一个对象来处理。组合框在一个时刻只有一个可选取的项,而且选取工作由组合框模型来处理。另一方面,组合框支持键选取,即在某项上按下一下键就可以选取这个项,但列表不能这样做。

构造函数
JComboBox()
创建具有默认数据模型的 JComboBox。
JComboBox(ComboBoxModel aModel)
创建一个 JComboBox,其项取自现有的 ComboBoxModel 中。
JComboBox(Object[] items)
创建包含指定数组中的元素的 JComboBox。
JComboBox(Vector<?> items)
创建包含指定 Vector 中的元素的 JComboBox。

常用方法
addActionListener(ActionListener l)
添加 ActionListener。
addItem(Object anObject)
为项列表添加项。
addItemListener(ItemListener aListener)
添加 ItemListener。
configureEditor(ComboBoxEditor anEditor, Object anItem)
利用指定项初始化编辑器。
getEditor()
返回用于绘制和编辑 JComboBox 字段中所选项的编辑器。
getItemAt(int index)
返回指定索引处的列表项。
getItemCount()
返回列表中的项数。
getModel()
返回 JComboBox 当前使用的数据模型。
getRenderer()
返回用于显示 JComboBox 字段中所选项的渲染器。
getSelectedIndex()
返回列表中与给定项匹配的第一个选项。
getSelectedItem()
返回当前所选项。
insertItemAt(Object anObject, int index)
在项列表中的给定索引处插入项。
isEditable()
如果 JComboBox 可编辑,则返回 true。
removeAllItems()
从项列表中移除所有项。
removeItem(Object anObject)
从项列表中移除项。
removeItemAt(int anIndex)
移除 anIndex 处的项。
setModel(ComboBoxModel aModel)
设置 JComboBox 用于获取项列表的数据模型。
setRenderer(ListCellRenderer aRenderer)
设置渲染器,该渲染器用于绘制列表项和从 JComboBox 字段的列表中选择的项。
setSelectedIndex(int anIndex)
选择索引 anIndex 处的项。
setSelectedItem(Object anObject)
将组合框显示区域中所选项设置为参数中的对象

例 1:给JComboBox增加ItemListener和ActionListener

import java.awt.BorderLayout; import java.awt.ItemSelectable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JComboBox; import javax.swing.JFrame; public class ItemListenerSelectingComboSample { static private String selectedString(ItemSelectable is) { Object selected[] = is.getSelectedObjects(); return ((selected.length == 0) ? "null" : (String) selected[0]); } public static void main(String args[]) { String labels[] = { "A", "B", "C", "D", "E", "F" }; JFrame frame = new JFrame("Selecting JComboBox"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JComboBox comboBox = new JComboBox(labels); comboBox.setEditable(true); comboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Selected index=" + ((JComboBox)e.getSource()).getItemCount()); } }); frame.add(comboBox, BorderLayout.SOUTH); ItemListener itemListener = new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { int state = itemEvent.getStateChange(); System.out.println((state == ItemEvent.SELECTED) ? "Selected" : "Deselected"); System.out.println("Item: " + itemEvent.getItem()); ItemSelectable is = itemEvent.getItemSelectable(); System.out.println(", Selected: " + selectedString(is)); } }; comboBox.addItemListener(itemListener); frame.setSize(400, 200); frame.setVisible(true); } }


例 2:采用模板创建JComboBox,同一个模板创建的两个不同JComboBox,对模板操作时两个JComboBox会同时改变

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; public class SharedDataBetweenComboBoxSample { public static void main(String args[]) { final String labels[] = { "A", "B", "C", "D", "E", "F", "G" }; final DefaultComboBoxModel model = new DefaultComboBoxModel(labels); JFrame frame = new JFrame("Shared Data"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); JComboBox comboBox1 = new JComboBox(model); comboBox1.setEditable(true); JComboBox comboBox2 = new JComboBox(model); comboBox2.setEditable(true); panel.add(comboBox1); panel.add(comboBox2); frame.add(panel, BorderLayout.NORTH); JButton button = new JButton("Add"); frame.add(button, BorderLayout.SOUTH); ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { model.addElement("New Added"); } }; button.addActionListener(actionListener); frame.setSize(300, 200); frame.setVisible(true); } }

例 3:采用ArrayList组装JComboBox

import java.awt.BorderLayout; import java.util.ArrayList; import java.util.Collection; import javax.swing.AbstractListModel; import javax.swing.ComboBoxModel; import javax.swing.JComboBox; import javax.swing.JFrame; class ArrayListComboBoxModel extends AbstractListModel implements ComboBoxModel { private Object selectedItem; private ArrayList anArrayList; public ArrayListComboBoxModel(ArrayList arrayList) { anArrayList = arrayList; } public Object getSelectedItem() { return selectedItem; } public void setSelectedItem(Object newValue) { selectedItem = newValue; } public int getSize() { return anArrayList.size(); } public Object getElementAt(int i) { return anArrayList.get(i); } } public class ArrayListComboBoxModelDemo { public static void main(String args[]) { JFrame frame = new JFrame("ArrayListComboBoxModel"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ArrayList<Object> arrayList = new ArrayList<Object>(); arrayList.add("A"); arrayList.add("B"); arrayList.add("C"); ArrayListComboBoxModel model = new ArrayListComboBoxModel(arrayList); arrayList.add("A"); arrayList.add("B"); arrayList.add("C"); JComboBox comboBox = new JComboBox(model); frame.add(comboBox, BorderLayout.NORTH); frame.setSize(300, 225); frame.setVisible(true); } }



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swing开发之JComboBox篇 的相关文章

  • HTTP 状态 404 - 请求的资源不可用

    在使用 MyEclipse IDE 中的 Tomcat 服务器和 Struts 2 框架时 我遇到了反复出现的问题 我将我的程序作为服务器应用程序运行 当它运行时 默认的index jsp 文件将成功打开 但应用程序的其他过去都不起作用 当
  • 是否可以在 Spring Batch 中结合分区和并行步骤?

    我只是想知道它在 Spring Batch 中可行吗 Step1Step2 流程 gt 流程1 流程2 流程3 Step3 其中每个flow1 gt 划分为 5 个 GridSizeflow2 gt 划分为 5 个 GridSizeflow
  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • 使用 Spring 时实例化对象,用于测试与生产

    使用 Spring 时 应该使用 Spring 配置 xml 来实例化生产对象 并在测试时直接实例化对象 这样的理解是否正确 Eg MyMain java package org world hello import org springf
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • Java 重写 hashCode() 得到 StackOverflowError

    所以我不太熟悉重写 hashCode 并且我似乎在 hashCode 方法中以某种方式进行了一些无限递归 这是我的场景 我有一个 DuplicateCache 类 它是一个缓存对象 用于检查系统中的重复对象 我有一个静态内部类 Duplic
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • Java 变量的作用域

    我不明白为什么这段代码的输出是10 package uno public class A int x 10 A int x 12 new B public static void main String args int x 11 new
  • @EnableTransactionManagement 的范围是什么?

    我试图了解正确的放置位置 EnableTransactionManagement多个 JavaConfig 上下文的情况下的注释 考虑以下场景 我在 JPAConfig java 和 AppConfig java 中有 JPA 配置以及一组
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • 打印包含 JBIG2 图像的 PDF

    请推荐一些库 帮助我打印包含 JBIG2 编码图像的 PDF 文件 PDFRenderer PDFBox别帮我 这些库可以打印简单的 PDF 但不能打印包含 JBIG2 图像的 PDF PDFRenderer尝试修复它 根据 PDFRedn
  • 从 html 页面和 javascript 调用 java webservice

    我正在尝试从 javascript 调用 java 实现的 Web 服务 使用 NetBeans IDE 我读过很多关于 jQuery 和 AJAX 的内容 但我似乎无法掌握它 假设我的 Web 服务 WSDL 位于 http localh
  • 不兼容的类型:在 java netbeans 中对象无法转换为 String

    我试图在我的项目中使用对象数组 但出现错误 incompatible types Object cannot be converted to String 在这一行 ST1 new String emt1 emt2 emt3 emt4 现在
  • OpenJDK 版本控制

    上下文 我想确保我们系统上安装的 Java 不受 CVE 2022 21449 的影响 java version 给出 openjdk version 11 0 7 2020 04 14 LTS OpenJDK Runtime Enviro
  • 如何为 Jackson 编写一个包罗万象的(反)序列化器

    当您提前知道类型时 编写自定义序列化器非常容易 例如 MyType一个人可以写一个MyTypeSerializer extends StdSerializer
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这

随机推荐

  • Ubuntu防火墙操作

    ubuntu默认提供了防火墙工具ufw 安装sudo apt get install ufw 检查防火墙的状态 sudo ufw status inactive 关闭 active 开启 关防火墙 sudo ufw disable 开防火墙
  • linux 全局查找文件命令

    find name xxx aaa
  • android bitmap面试题,Android面试Android进阶(十四)-Bitmap相关问题

    问 drawable和mipmap的区别是什么 答 根据官方说明 应用图标的图片资源存放在mipmap系列文件夹中 而其余图片存放在drawable系列文件夹中 1 mipmap纹理映射技术会将资源缩放到设备分辨率大小 drawable会将
  • Struts2框架xml验证

    struts2框架验证 xml方式 首先要从页面中获取对应的标签name属性的值 在动作类action中声明同名的属性 提供get和set方法 创建一个xml格式验证文件 命名方式 ActionClassName validation xm
  • vue2 + antd1.7.8 和 vue3 + antd2.2.8表单动态添加删除表单项

    1 vue2 antd 1
  • 英文投稿的一点经验【转载】

    英文投稿的一点经验 转载 1 首先一定要注意杂志的发表范围 超出范围的千万别投 要不就是浪费时间 另外 每个杂志都有他们的具体格式要求 一定要按照他们的要求把论文写好 免得浪费时间 前些时候 我的一个同事向一个著名的英文杂志投稿 由于格式问
  • 【Android App】实战项目之仿微信的私信和群聊App(附源码和演示视频 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信 手机最开始用于通话 后来增加了短信功能 初步满足了人与人之间的沟通需求 然而短信只能发文字 于是出现了能够发图片的彩信 但不管短信还是彩信 资费都太贵了 令人惜墨如金 后来移动公司推出飞信 它支持
  • 不同设备屏幕尺寸和DPR适配

    为什么需要适配 目前市面上设备屏幕属性十分多样化 宽度和DPR并不一致 而作为设计和前端开发 无法为每个尺寸的设备单独设计一套UI并将其转为前端代码 这不现实 所以我们需要一套方案来将一套设计稿完美呈现在不同尺寸的设备上 设备的多样性不止体
  • Vue的双向绑定

    看过无数遍 还是说不清楚 来个说人话的加深印象 首先再vue初始化的时候 就对data数据进行了劫持监听 其中就是监听器 Observe 用来监听所有属性 若有属性发生变化就需要告诉订阅者Watcher看是否需要更新 因为订阅者Watche
  • [Matlab科学计算] 欧拉角和坐标变换个人总结

    问题由来 在计算铁磁材料多晶体的有效模量时 需要考虑晶粒在多晶体中的方向分布 一般用三个欧拉角来表示晶粒在多晶体中的方向 用方向分布函数来表示某个方向的分布密度 基于此 迫使我要掌握欧拉角 但是在阅读众多教材和博客文章中发现 大家对欧拉角的
  • JAVA对象在内存中运行机制

    在方法中创建一个对象时 在方法栈中只存有对象在堆中的地址 对象本身存放在堆内存中 类中的非static成员属于对象在堆中被创建 类中的static成员属于类并在运行类时存放在永生代中
  • PV、EV、AC、BAC、EAC、ETC等的含义及计算公式

    PV EV AC BAC EAC ETC等计算公式含义 PV Planned Value 计划值 应该完成多少工作 按照计划截止目前应该花费的预算 AC Actual Cost 实际成本 完成工作的实际成本是多少 截止目前实际的花费 EV
  • multiple definition of(变量或者函数)

    今天在公司写项目的时候 遇到如下错误 半个小时了 没看出来问题出在哪里 我看了好几遍代码 确认没有重定义 后来问旁边的大牛 才发现自己手误 错吧 include area h 写成 include area c 千万得小心啊 有时候心里想的
  • Qt + C++编程问题系列1:解决因this指针被析构导致的崩溃问题<初识enable_shared_from_this类及使用智能指针的好处>

    这里是目录 前言 原因 解决办法 boost和C 11 结尾 前言 在基于Qt和C 开发的程序运行的时候 程序突然发生崩溃 在查找原因的时候花费的时间比较多 情形一般情况遇不到 因此写篇博客记录一下 原因 在Qt编程中 很多时候为了不让数据
  • Hive 安装与配置步骤

    Hive 安装与配置步骤 一 下载版本 1 1下载hive 1 2 直接用 wget 下载 1 3 解压 二 配置文件 2 1 修改hive env sh 2 2 修改hive log4j properties 2 3 配置MySQL作为M
  • C++库std::flush介绍

    std flush 介绍 使用场景 示例 调试场景 实时进度指示场景 保证日志完整性场景 介绍 std flush 是C 标准库 中的一个操作符 用于刷新输出流 刷新输出流表示将缓冲区中的数据立即发送到关联的输出设备 例如屏幕或文件 在某些
  • R语言金融分析作业(一)

    1 从WDI分别下载所有国家2016年和2017年GDP数据 1 计算经济增长 2 变成宽数据 library WDI library reshape 在线获取数据 DF lt WDI country all indicator NY GD
  • python导出时序数据精度缺失解决办法(对时序数据重采样)

    源码 import pandas as pd 导入数据 parse dates True 将时间转换成时间类型的索引 df pd read excel D 机器人采集数据样本 xlsx index col 时间 parse dates Tr
  • 七天玩转Redis

    目录 1 搭建环境 2 测试Redis 3 StringRedisTemplate 3 1 介绍 3 2 StringRedisTemplate常用操作 3 3 StringRedisTemplate的使用 4 RedisTemplate
  • Swing开发之JComboBox篇

    JList和ComboBox很相似 因为这两个组件都显示一个项列表 因此 它们都有扩展ListModel接口的模型 而且 这两个组件都有绘制器 这些绘制器通过实现ListCellBenderer接口来绘制列表单元 但是 列表和组合框在施工方