2016-11-24 1 views
0

필자가 작성중인 프로그램에 대한 자동 완성 텍스트 상자를 만들려고합니다. 나는 논리를 가지고 있지만 제대로 구현하는 데 어려움을 겪고있다. 처음에는 키 수신기를 사용해 보았지만이 솔루션은 여러 키 누르기를 동시에 처리하는 방식이 약간 이상했습니다. 그렇다면 훨씬 더 나은 DocumentListener 시도했지만 스레드 문제로 인해 수신기 내에서 문서를 편집 할 수 없습니다. DocumentFilter에 대해 읽었지만 사용 방법에 대한 단일 안내서를 찾을 수 없습니다. documentListener로 문서를 편집하는 방법이 있습니까? 아니면 DocumentFilter를 권하고 싶습니다. 그렇다면 어떻게 사용합니까 ??자바에서 문서 수신기가있는 자동 완성 텍스트 상자

+1

Runnable 내에 편집 내용을 넣고 SwingUtilities.invokeLater (...)를 사용하여 이벤트 스레드에 대기시킴으로써 Document *를 조심스럽게 편집 할 수 있습니다. 그러나 이것은 위험한 일입니다. DocumentFilter를 사용하는 방법에 관해서는이 사이트의 많은 예제들이 나와 있습니다. 그냥 [사이트 검색] (https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=site:stackoverflow.com+java+swing+DocumentFilter) (링크를 클릭하십시오). –

+0

예 Listener 내부에서 invokeLater를 사용하여 시도했지만 무한 루프로 실행되었습니다. 왜 그런 일이 일어 났는지 아시오 ?? – namarino

+1

그건 위험의 일부입니다 - 당신이 청취자를 호출하는 문서를 변경할 때 청취자 내에서 문서를 변경하면 이것은 순환 참조가 될 수 있습니다. –

답변

0

문서를 편집하는 데 DocumentListener를 사용하면 안됩니다. 이렇게하면 SwingUtilities.invokeLater (...)를 호출해야하며 DocumentListener가 문서의 변경 사항을 감지 할 때마다 편집하면 무한 루프가 발생합니다. 가장 좋은 방법은 DocumentFilter를 사용하는 것입니다.

관련 문제