2013-02-04 71 views
0

我写了一个自动完成组合框程序,其中我搜索用户在文件中输入的单词。该程序工作正常,但是,combobox editor不会返回任何东西时,键入内容。我不知道这是为什么..这是处理问题的代码块。jComboBox编辑器返回空字符串

// in GUI class constructor 
    InstantSearchBox = new JComboBox(); 
    InstantSearchBox.setEditable(true); 

    /*****/ 
    KeyHandler handle = new KeyHandler(); 

    InstantSearchBox.getEditor().getEditorComponent().addKeyListener(handle); 


// Keylistener class (KeyPressed method) 
try 
{ 
    dataTobeSearched = InstantSearchBox.getEditor().getItem().toString(); 

    // the string variable is empty for some reason 
    System.out.println ("Data to be searched " + dataTobeSearched); 
} 
catch (NullPointerException e) 
{ 
    e.printStackTrace(); 
} 

问候

+1

我会怀疑这种方式可能会提出一些建议......,为了更好的帮助,尽快发布一个[SSCCE](http://sscce.org/),短的可运行的,可编译的,只是关于'JFrame ''JComboBox'和硬编码值'Items' – mKorbel

+0

这里有两个答案,不是,从来没有,这种方式不可能在'Editor'中捕获'non_finalized KeyEvents' vs在Swing – mKorbel

回答

2

请勿使用KeyListener。在生成keyPressed事件时,键入的文本还没有添加到文本字段中。

检查文本字段更改的更好方法是将DocumentListener添加到文本字段的Document中。有关更多信息,请参阅How to Write a Document Listener上的Swing教程部分。

0

使用InstantSearchBox.getSelectedItem()代替InstantSearchBox.getEditor().getItem()

1

您应该使用

dataTobeSearched = (String) InstantSearchBox.getSelectedItem();
尽管它的名称是可编辑组合框,但此方法仅返回输入的文本。

编辑器仅在JComboBox内部用于在输入时临时捕获输入。一旦键入完毕,编辑器就会被清除,文本将被传回到组合框模型。

这允许编辑器一次性在多个组合框之间共享 - 它们只在需要时跳入,捕获输入,再次跳出并在编辑完成时清除。

+0

中为'Autocompleted funcionalities'提供'文档'我很怀疑你是否误解了我,或者我无法理解你的观点。实际上,组合框的工作方式类似于Google搜索框,用户在其中键入内容,并根据输入内容是否完整,即时搜索在弹出框中提供建议。我试图实现 –

+0

啊是的。你已经发布了更多的代码。 –