在我目前的项目中,我使用的是SwingX中的AutoCompleteDecorate
。
AutoCompleteDecorator.decorate(jComboBox1);
但是,我想覆盖退格操作。最初,使用AutoCompleteDecorate
。decorate(JComboBox
),按退格键将组合框中的选项向左移动,并且不删除前一个字符。我想实现退格的默认功能(即删除前一个字符),即使我AutoCompleteDecorate
我的JComboBox
。
请帮我解决我的问题。提前谢谢。
答案 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,然后检查新单词是否在列表中并重新选择(或不重复)。很难说不知道要求。