2009-11-10 2 views
3

편집 가능한 셀이있는 JTable이 있습니다. 각 셀에는 입력 된 텍스트를 빠르게 검증 할 수있는 CarretListener가 있습니다. 그러나 하나의 특수 셀에서는 목록에서 항목을 선택할 수 있어야합니다. 목록은 텍스트를 입력 할 때 생성됩니다. 입력 항목이 같아서 입력 된 텍스트와 같은 목록의 Programm Serach는 Google에서 제안하는 것과 같습니다. 지금까지 그 모든 것이 좋다. 그러나 나는 그 목록을 올바른 위치에 표시하는 방법을 알지 못합니다. GlassPane을 사용해 보았지만 이렇게 잘 작동하지 않습니다. 셀의 좌표를 가져 와서 JList를 표시하는 데 문제가 있습니다. 행 전체 높이를 설정하면 전체 행을 변경하지 않으므로 전체 목록도 표시되지 않습니다. 아마도 TableCellRenderer에 속임수가 있습니까? 완벽한 소스 코드가 필요 없지만 올바른 방향으로 밀어 넣기가 필요합니다. 여기 스윙, 편집 가능한 jTable에 JList를 표시하여 텍스트 자동 완성 항목을 선택하십시오.

는 programm에의 그림이며이 같아야합니다 HWO : 귀하의 관심을 http://img198.imageshack.us/img198/3227/sosollsseinh.jpg 감사

마크는 추가하여, 당신은 다른 방법을 시도 할 수 목록에 특정 동작을 적용하지 않는

답변

1

이 테이블의 편집기로 콤보 박스. 예를 들어 DefaultCellEditor을 확인하십시오.

올바른 값으로 호출 할 때 콤보 상자의 내용을 수정하면 필요에 맞게 나타납니다. 이를 위해서는 TableCellEditor을 구현하여 자신의 CellEditor를 만들어야합니다. 그러면 getTableCellEditorComponent() 메서드에서 호출 할 때마다 값을 변경할 수 있습니다.


편집 : 당신이 의견에 대해 얘기 KeyListener이 문제 [정보, 당신은 실제 텍스트는 JTextField를 업데이트하기 전에 키 이벤트가 송신하고 있다고 생각합니다. 따라서 getText()을 호출하면 새 문자가없는 값이 반환됩니다.

그러나 KeyEvent이므로 직접 입력 한 문자인지 확인하려면 evt.getKeyChar() 또는 evt.getKeyCode()으로 직접 입력 한 문자에 액세스 할 수 있습니다. 이 방법을 사용하면 필요한 "텍스트"를 모두 알 수 있습니다.


또한, 당신의 의견에 비디오에서, 당신이 적응 사용자가 입력을 시작, 이미 입력 된 내용에 따라 선택을 억제 내용에 따라 사실에 목록을 원하는 것 같다.

여분의 라이브러리를 사용할 수 있고 허용하는 경우 SwingX 구성 요소 (http://swinglabs.org/)을 살펴 보는 것이 좋습니다. 이 라이브러리는 일반적으로 스윙 인터페이스에 사용할 유용한 구성 요소를 많이 제안합니다. 이 사이트에는 데모가 있지만이 시간에는 사용할 수없는 것으로 보입니다. 자신의 패키지 "자동 완성"는 사용자를 완료하기 위해 노력할 것입니다 수 있도록, 당신은 당신이 당신의 콤보 상자 편집기를 개선 할 수 있도록하는 "AutoCompleteDecorator"라는 이름의 클래스 및 기타 유용한 사람을 찾을 수있을 것입니다에서

스스로 입력하고 목록에서 좋은 위치로 스크롤합니다 (목록을 필터링 할 수도 있다고 생각합니다. 원하는 정확한 동작이지만 완전히 확신 할 수는 없습니다). 이 기능을 사용할 수 있다면 실제로 캐럿 이벤트를 처리하는 번거 로움을 줄이고 목록을 업데이트 할 수 있습니다.

자신의 사이트에서 download the .Jar and the javadoc하실 수 있습니다. 다른 사이트의 Here is a copy of the javadoc, 자동 완성 패키지의 경우에는 그 동안 변경 될 수 있지만 아이디어를 얻을 수 있습니다.

+0

안녕, 빠른 답변에 대한 감사를 지원합니다. 이미 내 자신의 CellEditor가 있습니다. 하지만 JTextField 대신 jList를 사용하면 첫 번째 행만 표시되므로 문제가 있습니다. 나는 TextField가있는 셀 아래에 목록을 표시하는 것이 가장 좋은 방법이라고 생각합니다. Nom 나는 InternalFrames와 함께 해결 방법을 찾으려고 노력하고 있습니다 .... –

+0

나는 이해할 수 없다. 필드 +리스트는 다소 콤보 박스 (combobox)입니다. 팝업 목록에 대한 InternalFrames의 해결 방법은 다소 과장된 것처럼 보입니다./ – Gnoupi

+0

예, 절대적으로 맞습니다 ^^ 하지만 문제는 첫 번째 행만 표시된다는 것입니다. –

0

JList 대신 JCombobox과 같이 사용할 수 없습니까? 그건 더 쉽지 않을거야. DefaultCellEditor으로 상자 밖으로 JCombobox,

TableColumn X = table.getColumnModel().getColumn(Y); 
JComboBox cb = new JComboBox(VECTOR_OF_ITEMS); 
X.setCellEditor(new DefaultCellEditor(cb)); 
+0

둘 다 맞습니다. 하지만 어떻게해야합니까 입력란 아래에 항상 4 행을 관리 콤보 상자의 필드가 표시됩니까? 입력 할 수 있지만 나중 항목을 표시하지 않습니다. –

+0

지터가 ... 내가 말한 것을 정확하게 말하면서. 그러나 그는 셀에 따라이 콤보 상자의 내용을 변경할 수 있어야하므로 DefaultCellEditor를 사용할 수 없습니다. – Gnoupi

+0

권자에 대한 그리고 당신 downvote? – jitter