我正在instant search
编写Bing / Google combo box
类功能,因此此组合框会根据用户输入的内容向用户提供建议。该程序就像一个魅力,但它们是一个我无法弄清楚如何解决的错误。问题是,键入的第一个字符在键入字符的第二个字符后被识别,字符的其他位置也是如此。
以下是代码:
public MyClass extends JFrame
{
private Document doc;
public MyCode()
{
comboxBox= new JComboBox();
Handler handle = new Handler();
JTextComponent comp = (JTextComponent) comboBox.getEditor().getEditorComponent();
doc = comp.getDocument().addDocumentListener(handle);
comboBox.addKeyListener(handle);
}
private class Handler implements DocumentListener,KeyListener
{
String dataTobeSearched= "";
@Override
public void changedUpdate(DocumentEvent event) {
try
{
dataTobeSearched = doc.getText(0, doc.getLength());
System.out.println("Data to be searched "+dataTobeSearched);
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Override
public void keyPressed(KeyEvent event) {
changedUpdate(null);
}
}
我做错了什么?
我将keyListener添加到组合框编辑器中,因为在组合框中输入内容时没有调用DocumentListener
?如果还有其他简单的替代方案,请分享。
如何解决上述问题?
答案 0 :(得分:3)
在changedUpdate()
SwingUtilities.invokeLater()
内打电话
答案 1 :(得分:1)
根据Oracle网站上的Java tutorial,changedUpdate()
方法不适用于纯文本文档。如果是这种情况,请使用insertUpdate()
和/或removeUpdate()
。
在方法中使用SwingUtilities
的建议仍然有效。