AutoCompleteDecorate覆盖

时间:2012-01-24 02:38:26

标签: java swing autocomplete jcombobox swingx

在我目前的项目中,我使用的是SwingX中的AutoCompleteDecorateAutoCompleteDecorator.decorate(jComboBox1);

但是,我想覆盖退格操作。最初,使用AutoCompleteDecorate。decorate(JComboBox),按退格键将组合框中的选项向左移动,并且不删除前一个字符。我想实现退格的默认功能(即删除前一个字符),即使我AutoCompleteDecorate我的JComboBox

请帮我解决我的问题。提前谢谢。

1 个答案:

答案 0 :(得分:4)

不重要 - 装饰器在实现select-instead-delete方面有很长的路要走; - )

首先,您需要定义所需的行为。然后实现一个按预期执行的Action,并将其放在编辑器的ActionMap中:

Action myBackspace = ...
ActionMap map = ((JComponent) decorateCombo.getEditor().getEditorComponent())
     .getActionMap();
map.put("nonstrict-backspace", myBackspace);

这很模糊,因为我不知道你想要什么,最好查看AutoComplete的来源,以了解如何实现myBackspace

修改

只是详细说明模糊性:我的第一个想法是简单地重新安装默认的退格绑定,如:

InputMap map = ((JComponent) decorateCombo.getEditor().getEditorComponent())
    .getInputMap();
map.put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_BACK_SPACE, 0), 
            DefaultEditorKit.deletePrevCharAction);

这很可能不是预期的:假设插入符号位于可编辑组合中包含元素中间的某个位置,则选择从插入符号到结尾的文本,因此deletePrev删除所选择的而不是prev char 。这可能导致实现自定义操作的方式:首先清除选择,然后删除deletePrev,然后检查新单词是否在列表中并重新选择(或不重复)。很难说不知道要求。