如何在Java SE中使用“AutoCompleteSupport”(glazedlists)向KeyListener
添加JComboBox
。
我正在开发一个小程序,其中JComboBox
与AutoCompleteSupport一起使用。如果我在JComboBox
中按Enter键,我想执行一个方法。如何使用AutoCompleteSupport执行此操作?
答案 0 :(得分:2)
查看提及的AutoCompleteSupport (Glazed Lists):
JComboBox ActionEvents
在这些情况下,JComboBox会触发一个ActionEvent:
- 用户点击回车键
- 弹出窗口中的所选项目已更改(可能由于鼠标单击,自动完成术语更改或使用箭头键而发生)
- JComboBox失去焦点并包含一个未出现在ComboBoxModel中的值
醇>
另请参阅以下摘录:
public void keyPressed(KeyEvent e) {
if (!isTableCellEditor)
doNotTogglePopup = false;
// this KeyHandler performs ALL processing of the ENTER key otherwise multiple
// ActionEvents are fired to ActionListeners by the default JComboBox processing.
// To control processing of the enter key, we set a flag to avoid changing the
// editor's Document in any way, and also unregister the ActionListeners temporarily.
if (e.getKeyChar() == KeyEvent.VK_ENTER) {
doNotChangeDocument = true;
this.actionListeners = unregisterAllActionListeners(comboBox);
}
// make sure this backspace key does not modify our comboBoxEditorComponent's Document
if (isTrigger(e))
doNotChangeDocument = true;
}
和
public void keyReleased(KeyEvent e) {
// resume the ability to modify our comboBoxEditorComponent's Document
if (isTrigger(e))
doNotChangeDocument = false;
// keyPressed(e) has disabled the JComboBox's normal processing of the enter key
// so now it is time to perform our own processing. We reattach all ActionListeners
// and simulate exactly ONE ActionEvent in the JComboBox and then reenable Document changes.
if (e.getKeyChar() == KeyEvent.VK_ENTER) {
updateFilter();
// reregister all ActionListeners and then notify them due to the ENTER key
// Note: We *must* check for a null ActionListener[]. The reason
// is that it is possible to receive a keyReleased() callback
// *without* a corresponding keyPressed() callback! It occurs
// when focus is transferred away from the ComboBoxEditor and
// then the ENTER key transfers focus back to the ComboBoxEditor.
if (actionListeners != null) {
registerAllActionListeners(comboBox, actionListeners);
comboBox.actionPerformed(new ActionEvent(e.getSource(), e.getID(), null));
}
// null out our own reference to the ActionListeners
actionListeners = null;
// reenable Document changes once more
doNotChangeDocument = false;
}
if (!isTableCellEditor)
doNotTogglePopup = true;
}
您希望ActionListener
代替KeyListener
。