2012-01-24 54 views
3

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

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

请帮我解决我的问题。先谢谢你。

+0

您可能需要发布一些相关的代码片段,特别精确简洁。 – Lion

+0

为什么downvote?这是一个完全明确的问题... – kleopatra

+0

@kleopatra这是相同的user_profile plus_one_point作为up_vote – mKorbel

回答

4

不是小事 - 装饰去执行选择 - INSTEAD-OF-删除;-)

首先,你需要定义你想要的行为很长的路要走。然后执行一个动作,做你有心,并将其放置在编辑器中的ActionMap中:

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

这是模糊的,因为,因为我不知道你想要什么,最好先了解一下自动完成的源获得的如何实现myBackspace

编辑

的想法只是为了阐述含糊了一下:我首先想到的是简单地重新安装默认的退格样结合:

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

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

+0

_非常感谢,实际上我试图从昨天开始恢复默认的退格绑定。无论如何,我会以此为导向._ – dmfrl