最近需要用到一个功能:通过一个文本框编写命令,然后发送,需要记录这些历史命令,以便需要发送相同命令时直接选择,或者基于历史命令进行编辑后再发送。
首先想到了editable的JComboBox,发送命令后将其添加到JComboBox中,需要历史命令时下拉选择。经测试发现一个很严重的问题:当JComboBox中添加有相同的命令时,键盘的上下键无法遍历下拉列表,会在相同命令间循环,必须通过鼠标操作。这显然不满足要求,故而萌发了定制一个JComboBox的想法。
仿照JComboBox的做法:由一个文本框editor、一个下拉按钮button、一个弹出菜单popup(包含一个可滚动的列表框list)组成。文本框响应按键事件——上下键按下时弹出选择框(仅响应由文本框触发的事件,不对转发的事件响应);下拉按钮响应鼠标单击事件弹出选择框;弹出菜单中的列表框响应按键事件——ENTER按下时表示确定选择,并转发键入事件,响应鼠标单击事件——确定选择。
提供部分JComboBox类似的接口:添加选项,获得当前选中项。
可添加KeyListener,并将其添加到editor上。
其中碰到两个了比较大的问题:
(1)如何实现类似JComboBox的下拉按钮。开始不知道,还琢磨用图标实现呢,看了JComboBox才发现,原来有BasicArrowButton,而且还是不同平台实现的;
(2)弹出菜单中的列表框无法获取焦点(鼠标单击下拉按钮或文本框中按下上下键),使用list.requestFocusInWindow()无论如何就是无法获得焦点,以至于没法通过键盘的上下键选择。经查,尝试list.grabFocus(),居然获取到了!!不过grabFocus()方法有以下说明:“This method is intended for use by focus implementations. Client code should not use this method; instead, it should use requestFocusInWindow().”,不过没办法了,能用最重要!(当然,还有一点很重要,弹出菜单必须能获得得焦点)
希望有相同需求的人测试改建!
分享到:
相关推荐
在标题"JComboBox下拉框多选"中提到的场景,就是将`JComboBox`与`JCheckBox`相结合,以实现用户可以从下拉列表中选择多个选项的功能。 以下是一个详细的解释: 1. **JComboBox的基本使用**: `JComboBox`是Java ...
在本示例中,主要通过监听`JComboBox`的选择变化事件,并根据选择结果动态创建新的`JComboBox`来实现级联效果。具体来说,当用户在一个`JComboBox`中做出选择后,程序会触发级联逻辑,创建新的`JComboBox`并将其添加...
Java 实现下拉列表 JComboBox 中值和显示不同 在 Java 中,实现下拉列表 JComboBox 中值和显示不同是一种常见的需求。下拉列表 JComboBox 是 Java 中的一种 GUI 组件,用于提供用户选择多个选项。通常情况下,我们...
Java `JComboBox` 是 Swing 组件库中的一个控件,用于在下拉列表中显示一组可选择的选项。它提供了一个简单的用户界面,允许用户从预定义的选项中进行单选。`JComboBox` 在 Java 图形用户界面(GUI)编程中非常常见...
在Java Swing中,`JComboBox`和`JList`是两种常用的用户界面组件,用于创建交互式的下拉列表和多选列表。在这个“文件浏览器组件”中,它们被巧妙地结合在一起,为用户提供了一个功能丰富的文件浏览和选择的界面。这...
Java Swing JComboBox 下拉列表框的示例代码 Java Swing JComboBox 下拉列表框是一种常用的 GUI 组件,它允许用户从多个选项中选择一个值。下面将详细介绍 JComboBox 的基本概念、常用构造方法、常用方法和示例代码...
本篇文章将深入探讨Java中JComboBox的事件处理机制,以及如何通过编程实现这些功能。 JComboBox的事件主要分为两类:ActionEvent和ItemEvent。ActionEvent通常发生在用户从下拉列表中选择一个选项并点击确认按钮...
用 Java 实现 ARP 报文的发送 本文将详细介绍如何使用 Java 语言实现 ARP 报文的发送,包括对所使用到的几个类的描述。 一、需求分析 在计算机网络课程设计中,需要实现 ARP 报文的发送和接收,并将其展示在可视...
当需要将数据库的数据实时展示在`JComboBox`中时,就需要实现动态绑定。本实例是关于如何将`Sql2000`数据库中的数据与`JComboBox`进行动态绑定,通过`JDBC`(Java Database Connectivity)接口来实现数据库连接和...
在Java Swing库中,`JComboBox`是一种常用...在实际编程中,你可以根据需求进一步定制`JComboBox`的行为,如改变其外观、添加过滤功能等。通过深入理解和实践,你将能够更好地利用`JComboBox`提升应用程序的交互体验。
压缩包中的“Swing-JComboBox.txt”可能包含了实现这些自定义的源代码示例,包括但不限于改变字体、颜色、边框、背景等属性,或者是使用自定义图标,甚至添加动画效果。通过分析这个文本文件,开发者可以学习如何...
创建自定义`JComboBox`的第一步是实现一个`CellRenderer`。`CellRenderer`决定了`JComboBox`中的每个选项如何显示,包括文本和图像。这里我们可以使用`DefaultListCellRenderer`的子类,并覆盖`...
本资源提供了一个基于Java Swing的JComboBox实现,它能够实现省份、城市、区县的联动选择。下面我们将详细探讨这个JCombobox源代码中的关键知识点。 1. **JComboBox**: - `JComboBox`是Java Swing中的一个组件,...
支持自动过滤可选项的JComboBox 支持键盘选择、鼠标选择
`JComboBox With JCheckBox`的实现通常涉及以下步骤: 1. **创建JCheckBox对象**:首先,你需要为每个待选项目创建一个`JCheckBox`实例。这可以通过`new JCheckBox(String text)`构造函数完成,其中`text`参数是...
在Java Swing框架中,`JComboBox`是一个非常重要的组件,它主要用于实现下拉列表的功能,常被用作用户输入的一种形式。本文将围绕如何在Swing组件`JComboBox`中获取下拉列表中的元素进行详细讲解。 #### 一、...
要使用`ComboBoxModel`构造`JComboBox`,你需要实现这个接口或者使用现有的实现,如`DefaultComboBoxModel`。下面是一个简单的示例,展示了如何使用`DefaultComboBoxModel`: ```java import javax.swing.*; import...
JComboBox继承自JComponent,实现了ComboBoxModel接口,提供了多种方法来管理选项列表和选项的选择。 一、JComboBox的基本用法 JComboBox的基本用法非常简单,首先需要创建一个JComboBox对象,然后可以使用addItem...
在某些场景下,我们可能需要在`JTable`的某一列中嵌入`JComboBox`,以实现更加灵活的数据输入方式。本篇将详细介绍如何在`JTable`中插入`JComboBox`,并讨论如何根据条件动态地修改某一行的`JComboBox`中的可选项。 ...
JComboBox自动过滤,很好用~,能添加到swing,无ui限制