2014-01-19 3 views
0

사용자가 일련의 문자를 입력하면 JList 항목을 검색하여 일치시킨 다음 해당 항목을 강조 표시 할 수 있도록 jlist에 연결된 검색 상자를 만드는 방법을 찾고 있습니다. jtextfield를 만들고 keylistener를 추가했습니다. 이 코드 부분은 올바르게 작동하지만 사용자가 입력하는 첫 번째 문자에 대해서만 올바르게 작동합니다. 이 유형을 사용자가 입력하는 문자 수만큼 확장하려고합니다. 어떤 아이디어를 달성하는 방법?JList 검색

String[] feedStrings = {"aaa", "abc", "opo","oiuu"} 

JList feedList = new JList(feedStrings); 

feedList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 
feedList.setLayoutOrientation(JList.VERTICAL); 

feedList.setVisibleRowCount(4); 


       JTextField searchbox = new JTextField(); 
     searchbox.setColumns(8); 
     searchbox.setVisible(true); 


     searchbox.addKeyListener(new KeyAdapter() { 
       public void keyReleased(KeyEvent e) { 

        String text = "" + e.getKeyChar(); 
        StringBuffer buffer = new StringBuffer(); 
        buffer.append(text); 
        String strbuf = buffer.toString(); 

        int index = feedList.getNextMatch(strbuf, 0, Position.Bias.Forward); 
        System.out.println(index); 
        feedList.setSelectedIndex(index); 
      } 
     }); 
+1

텍스트 구성 요소에서 KeyListener를 사용하면 안되며 사실 KeyListeners 기간을 거의 사용하지 않아야합니다. 아마도 JTextField의 Document 대신 DocumentListener를 사용하려고 할 것입니다. –

+1

대신에 단일 열'JTable'을 사용해보십시오. ['RowSorter'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/DefaultRowSorter.html)를 테이블에 추가 할 수 있으며, 테이블로 사용할 수도 있습니다. 행 필터. –

+0

코드 블록에 일관되고 논리적 인 들여 쓰기를 사용하십시오. 코드의 들여 쓰기는 사람들이 프로그램 흐름을 이해하도록 돕기위한 것입니다. –

답변

1

만 사용자 유형이 첫 번째 문자에 미리 감사드립니다. 이 숫자를 사용자가 입력하는 문자 수만큼 확장하려고합니다.

문서의 텍스트 만 사용하십시오. 그것이 KeyListener가 아닌 DocumentListener를 사용하는 또 다른 이유입니다.

나는 JTable을 사용하라는 제안을 좋아하지만. How to Use Tables에 대한 스윙 튜토리얼에는 정확히 어떻게하는지 보여주는 실례가있다. JTable API를 읽으면 자습서에 대한 링크를 찾을 수 있습니다.