`
niqingyang
  • 浏览: 42970 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

可编辑的组合框JComboBox实现可删除下拉选项效果

阅读更多

   JComboBox是Java的Swing开发中比较常用的组件,但是默认的功能比较简单,在开发一个自己的小工具的时候,就希望能够通过上下方向键控制下拉框里Item的选中与否,并且希望能通过按Delete键对选中的Item进行删除,但是JComboBox从设计上就禁掉了对下来框里Item的各种事件的操作,所以实现起来就要换个思路,不能对下拉框里的Item进行绑定事件,因为他无法获取焦点,而焦点一直在JCombox的文本框里(我设置的是可编辑的JCombox),所以应该把事件加到JCombox的编辑框中,通过编辑框的KeyListener事件进行监听,代码如下:

 

package javax.swing;

import java.awt.Color;
import java.awt.Component;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
 * 
 * 带键盘事件的渲染器
 * 
 * @author 倪庆洋 <niqy@qq.com>
 * 
 * @date 2015-1-17 下午05:34:02
 * 
 */
public class LabelCellRenderer extends JLabel implements ListCellRenderer, KeyListener {

	private static final long serialVersionUID = 1L;
	private JComboBox comboBox;

	private int selectedIndex = -1;

	/**
	 * 构造函数
	 * 
	 * @param comboBox
	 *            当前渲染器所属的JComboBox
	 */
	public LabelCellRenderer(final JComboBox comboBox) {
		setOpaque(true);
		this.comboBox = comboBox;
		this.comboBox.getEditor().getEditorComponent().addKeyListener(this);
	}

	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

		this.setText(value.toString());

		this.setFont(this.comboBox.getFont());

		Color background;
		Color foreground;

		if (isSelected) {
			background = Color.decode("#3399FE");
			foreground = Color.WHITE;
			this.selectedIndex = index;
		} else {
			background = Color.WHITE;
			foreground = Color.BLACK;
		}

		setBackground(background);
		setForeground(foreground);

		return this;
	}

	@Override
	public void keyPressed(KeyEvent e) {
		int keyCode = e.getKeyCode();

		if (keyCode == 38) {// 按向上的方向键则索引减一
			int index = this.comboBox.getSelectedIndex();
			if (index == 0) {
				return;
			}
			index--;
			this.comboBox.setSelectedIndex(index);
		} else if (keyCode == 40) {// 按向下的方向键则索引加一
			int index = this.comboBox.getSelectedIndex();
			if (index == this.comboBox.getItemCount() - 1) {
				return;
			}
			index++;
			this.comboBox.setSelectedIndex(index);
		}else if(keyCode == 127){
			// 为防止误删除,只有在下来选项可视的情况下才可以执行删除操作
			if (this.comboBox.isPopupVisible()) {

				// 下来选框可见的情况下,设置Delete对文本框内文字操作无效
				JTextField textField = ((JTextField) this.comboBox.getEditor().getEditorComponent());
				String text = textField.getText();
				int position = ((JTextField) this.comboBox.getEditor().getEditorComponent()).getCaretPosition();
				
				// 如果是按Delete键则移除当前选中的Item
				if (this.selectedIndex >= 0 && this.selectedIndex < this.comboBox.getItemCount()) {
					this.comboBox.removeItemAt(this.selectedIndex);
					textField.setText(text);
					textField.setCaretPosition(position);
				}
				//此处代码在JDK1.6起作用,在JDK1.7失效,请注意
				e.setKeyCode(-1);
			}
		}
		
	}

	@Override
	public void keyReleased(KeyEvent e) {
		
	}

	@Override
	public void keyTyped(KeyEvent e) {

	}

}

 

 

通过此渲染器对Item进行重新渲染,在渲染的过程中记录所选择的索引并进行键盘事件的监听。

   调用如下:

 

package com.cntrust.file.test;

import javax.swing.JComboBox;
import javax.swing.JFrame;
//自定义
import javax.swing.LabelCellRenderer;

public class TestMain {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {

		JComboBox comboBox = new JComboBox();
		//只有为true的时候才能进行删除
		comboBox.setEditable(true);
		comboBox.setRenderer(new LabelCellRenderer(comboBox));
		
		JFrame jFrame = new JFrame();
		
		jFrame.add(comboBox);
		
		comboBox.addItem("张三");
		comboBox.addItem("李四");
		comboBox.addItem("王五");
		comboBox.addItem("赵六");
		
		
		jFrame.setSize(280, 60);
		
		jFrame.setVisible(true);
		
		
	}

}

   效果如下图:

 

删除前:

 删除后:

 

 

 

 

  • 大小: 24 KB
  • 大小: 20.9 KB
分享到:
评论

相关推荐

    aiohttp-3.9.2-cp310-cp310-musllinux_1_1_aarch64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pyzmq-25.1.2-cp37-cp37m-macosx_10_9_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pyzmq-26.0.0-cp311-cp311-musllinux_1_1_aarch64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    将用户添加到docker组

    linux常用命令大全

    关于51系列单片机的模块.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    使用VS创建C项目视频教程

    使用VS创建C项目视频教程

    protobuf-3.12.2-cp36-cp36m-manylinux1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    aiohttp-3.8.0-cp39-cp39-musllinux_1_1_aarch64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    操作系统课程设计:使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    pyzmq-14.1.1-cp33-cp33m-macosx_10_6_intel.macosx_10_9_intel.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Si-P1 GSD安装文件

    Si-P1 GSD文件

    aiohttp-3.9.0b1-cp38-cp38-musllinux_1_1_i686.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    protobuf-3.12.0-cp36-cp36m-manylinux1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    使用Qt开发的天气预警系统.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    基于单片机的连续测斜仪系统设计

    在介绍测斜技术的基本原理基础上,通过数学计算和分析,建立了测量参数的数学模型,并且通过欧拉变换计算推导出了钻孔轨迹各个参数的公式,从而确定了系统传感器需要采集的信号。 硬件设计包括数据采集、单片机控制、DSP解算、上、下位机通信四部分。数据采集部分首先介绍了选用的两种传感器三轴正交加速度计ADXL330和三轴正交磁通门HMC5883L的特性以及工作原理;之后设计了AD采样电路,用来完成对模拟信号的转换。单片机控制部分选用STC12C5A60S2单片机作为核心控制器件,执行采样和通信控制。DSP结算部分使用TMS320F28335DSP与单片机配合,DSP作为解算器,完成参数采集后的计算,提高计算的精准度和速度。使用RS485串行通信标准进行上、下位机之间的通信。 软件设计包括下位机程序和上位机程序。下位机设计了单片机的控制程序、DSP的解算程序以及串口通信程序,分别使用了单片机和DSP相应的开发软件,对需要实现的各个功能进行了模块化设计,采用C语言编程,程序编写以简单高效为原则。上位机程序采用Visual c++语言进行编写,主要作用是接收井下的数据并进行储存和显示,用户界面简单明了,易于操作。

    redis学习资料,运维开发设计实现

    redis学习资料,运维开发设计实现

    mysql安装配置教程.zip

    mysql安装配置教程

    基于BP神经网络的机械臂动力学模型系统辨识

    基于BP神经网络的机械臂动力学模型系统辨识,对于复杂模型建立传递函数或者变化矩阵,动手去推导是很难上手且出结果慢,现在运用BP神经网络快速实现结果

    2024-2030年加工羽毛(绒)行业市场调研及前景趋势预测报告.pdf

    2024-2030年加工羽毛(绒)行业市场调研及前景趋势预测报告.pdf

    2024-2030年动物皮革行业市场调研及前景趋势预测报告.pdf

    2024-2030年动物皮革行业市场调研及前景趋势预测报告.pdf

Global site tag (gtag.js) - Google Analytics