作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何在 Java SE 中使用“AutoCompleteSupport”(glazedlists)将 KeyListener
添加到 JComboBox
。我正在开发一个小程序,它有一个与 AutoCompleteSupport 配合使用的 JComboBox
。如果我在 JComboBox
中按 Enter 键,我想执行一个方法。我如何使用 AutoCompleteSupport 执行此操作?
最佳答案
查看 AutoCompleteSupport (Glazed Lists)其中提到:
JComboBox ActionEvents
A single ActionEvent is fired from the JComboBox in these situations:
- the user hits the enter key
- the selected item within the popup is changed (which can happen due to a mouse click, a change in the autocompletion term, or using the arrow keys)
- the JComboBox loses focus and contains a value that does not appear in the 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
。
关于java - 如何在 Java SE 中使用 AutoCompleteSupport (glazedlists) 向 JComboBox 添加关键监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8183459/
我是一名优秀的程序员,十分优秀!