除非您对列表应用特定行为,否则您可以尝试另一种方式,即添加一个组合框作为该表的编辑器。检查DefaultCellEditor以获取它的示例。
我认为,如果您在调用组合框时使用正确的值修改组合框的内容,它将符合您的需要。为此,您将需要创建自己的 CellEditor,很可能通过实现TableCellEditor来创建自己的 CellEditor,这样您就可以根据调用时间(在方法 getTableCellEditorComponent() 中)更改其中的值。
编辑:关于您在评论中谈论的KeyListener问题,您必须认为在 JTextField 中更新实际文本之前发送了 Key 事件。因此,您的调用getText()
返回没有新字符的值是正常的。
但是,由于这是一个KeyEventevt.getKeyChar()
,因此您可以直接使用 或访问输入的字符,evt.getKeyCode()
以检查这是否实际上是输入的字母。通过这些方法,您可以知道您需要的完整“文本”。
此外,从您评论中的视频来看,您似乎想要一个实际上根据用户开始输入的内容进行调整的列表,并根据已输入的内容限制选择。
如果您能够(并且允许)使用额外的库,我建议您查看SwingX 组件(http://swinglabs.org/)。这个库总体上提出了许多有用的组件,可用于 Swing 接口。他们的网站上有一个演示,虽然这个时间似乎不可用,也许是晚些时候。
在他们的包“ autocomplete ”中,您将能够找到一个名为“AutoCompleteDecorator”的类,以及其他有用的类,这将允许您改进您的组合框编辑器,以便它会尝试自己完成用户输入,并滚动到列表中的好位置(我认为它也可以过滤列表,您想要的确切行为,但我不完全确定)。如果您可以使用它,它实际上会为您省去自己处理插入符号事件以及更新列表的麻烦,因为它很可能会为您完成。
您可以在他们的网站上下载 .Jar 和 javadoc 。这是来自另一个站点的 javadoc 的副本,用于自动完成包,虽然它可能在此期间发生了变化,但它会给你一个想法。