3

我有一个带有可编辑单元格的 JTable。每个单元格都包含一个 CarretListener,用于快速验证输入的文本。但是在一个特殊的单元格中,您应该能够从列表中选择条目。输入文本时会生成列表。条目列表中的 Programm serach 相等,因此输入的文本,如谷歌建议。到目前为止一切都很好。但我不明白如何在正确的位置显示列表。我尝试了 GlassPane,但效果不太好。我无法获取单元格的坐标并显示 JList。设置行高以便显示整个列表也不起作用,因为我不想更改整行。也许 TableCellRenderer 中有一个技巧......?我不想要一个完整的源代码左右,但我需要朝着正确的方向前进。

这是程序的图片,它应该看起来像:http: //img198.imageshack.us/img198/3227/sosollsseinh.jpg 感谢您的关注

马克

4

2 回答 2

1

除非您对列表应用特定行为,否则您可以尝试另一种方式,即添加一个组合框作为该表的编辑器。检查DefaultCellEditor以获取它的示例。

我认为,如果您在调用组合框时使用正确的值修改组合框的内容,它将符合您的需要。为此,您将需要创建自己的 CellEditor,很可能通过实现TableCellEditor来创建自己的 CellEditor,这样您就可以根据调用时间(在方法 getTableCellEditorComponent() 中)更改其中的值。


编辑:关于您在评论中谈论的KeyListener问题,您必须认为在 JTextField 中更新实际文本之前发送了 Key 事件。因此,您的调用getText()返回没有新字符的值是正常的。

但是,由于这是一个KeyEventevt.getKeyChar() ,因此您可以直接使用 或访问输入的字符,evt.getKeyCode()以检查这是否实际上是输入的字母。通过这些方法,您可以知道您需要的完整“文本”。


此外,从您评论中的视频来看,您似乎想要一个实际上根据用户开始输入的内容进行调整的列表,并根据已输入的内容限制选择。

如果您能够(并且允许)使用额外的库,我建议您查看SwingX 组件http://swinglabs.org/)。这个库总体上提出了许多有用的组件,可用于 Swing 接口。他们的网站上有一个演示,虽然这个时间似乎不可用,也许是晚些时候。

在他们的包“ autocomplete ”中,您将能够找到一个名为“AutoCompleteDecorator”的类,以及其他有用的类,这将允许您改进您的组合框编辑器,以便它会尝试自己完成用户输入,并滚动到列表中的好位置(我认为它也可以过滤列表,您想要的确切行为,但我不完全确定)。如果您可以使用它,它实际上会为您省去自己处理插入符号事件以及更新列表的麻烦,因为它很可能会为您完成。

您可以在他们的网站上下载 .Jar 和 javadoc 。这是来自另一个站点的 javadoc 的副本,用于自动完成包,虽然它可能在此期间发生了变化,但它会给你一个想法。

于 2009-11-10T10:02:59.363 回答
0

你不能只作为 aJCombobox而不是 aJList吗?那会更容易没有。作为开箱即用的DefaultCellEditor支持,JCombobox

TableColumn X = table.getColumnModel().getColumn(Y);
JComboBox cb = new JComboBox(VECTOR_OF_ITEMS);
X.setCellEditor(new DefaultCellEditor(cb));
于 2009-11-10T11:03:54.553 回答