2013-02-04 3 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'를 사용하고'Item'의 하드 코드 된 vaule을 사용하면 – mKorbel

+0

이 두 개의 응답으로 여기에 있습니다. 절대 그렇지 않습니다.이 방법은'Editor'에서'non_finalized KeyEvents'를 잡을 수 없습니다 vs Swing에서'Autocompleted funcionalities'를위한'Document'를 밑에 두었습니다. – mKorbel

답변

2

KeyListener를 사용하지 마십시오. keyPressed 이벤트가 생성 될 때 입력 된 텍스트가 텍스트 필드에 추가되지 않았습니다.

텍스트 필드의 변경 사항을 확인하는 더 좋은 방법은 DocumentListener를 텍스트 필드의 문서에 추가하는 것입니다. 자세한 내용은 How to Write a Document Listener에있는 스윙 튜토리얼의 섹션을 참조하십시오.

0

대신 사용 InstantSearchBox.getEditor().getItem()InstantSearchBox.getSelectedItem().

1

사용해야합니다.

dataTobeSearched = (String) InstantSearchBox.getSelectedItem();
이 이름에도 불구하고 편집 가능한 콤보 상자의 경우이 메서드는 입력 된 텍스트를 반환합니다.

편집기는 JComboBox에서 입력 내용을 일시적으로 캡처하기 위해서만 내부적으로 사용됩니다. 입력이 완료되면 편집기가 지워지고 텍스트가 콤보 박스 모델로 다시 전송됩니다.

이렇게하면 여러 콤보 박스간에 편집자를 한꺼번에 공유 할 수 있습니다. 필요할 때 바로 뛰어 들고 입력을 캡처하고 편집을 마친 후 다시 뒤로 이동하고 편집을 마칩니다.

+0

당신이 저를 오해 한 것이 의심 스럽거나 당신의 요지를 이해할 수 없을 것 같습니다. 실제로 콤보 상자는 사용자가 입력하는 Google 검색 상자와 비슷하며 입력 여부에 관계없이 입력 여부에 관계없이 즉석 검색은 팝업 상자에 제안을 제공합니다. 그걸 구현하려합니다. –

+0

아 맞습니다. 이제 더 많은 코드를 게시했습니다. –

관련 문제