2014-07-16 3 views
2

JTable을 사용하여 스윙을 사용하여 UI를 만들었습니다. ListSelectionListener을 구현하여 테이블의 선택된 행을 기반으로 레코드를 가져올 수 있습니다. 선택 후 행을 선택 취소 할 수 없습니다.JTable에서 선택된 행을 선택 취소

기본적으로 클릭 한 번으로 행을 선택할 수 있어야하고 다른 클릭으로 행을 선택 취소 할 수 있어야합니다.

tableName.getSelectionModel.clearSelection을 사용해 보았지만 행이 선택되었는지 확인하는 방법을 모르겠습니다. 이게 뭐라고 할까?

내가 시도한 또 다른 해결책은 마우스 클릭 수신기를 사용하는 것입니다. 다시 말하지만, 마우스 클릭이 이전에 선택된 행에서 발생하는지 확인하기위한 조건을 작성할 수 없습니다. 이전 행을 선택할 수있는 방법이 있습니까?

나는 DefaultTableModel을 사용하고 있습니다.

+0

물론, http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#getSelectedRow을 (참조)하거나 selectionModel의에 http 직접 작업 할 경우 : //docs.oracle.com/javase/7/docs/api/javax/swing/ListSelectionModel.html#getMinSelectionIndex() – DSquare

+0

이 질문 확인 ... http://stackoverflow.com/q/18337580/2722799 –

답변

5

이 기능은 기본적으로 마우스 클릭을 사용할 때 "제어"키를 누르고 있으면 지원됩니다. 이것은 대부분의 응용 프로그램에서 사용되는 표준입니다.

비표준 방식을 사용하려면 ListSelectionModel을 사용자 정의해야합니다. 나는 setSelectionInterval(...) 메서드를 무시할 것이라고 생각합니다. 즉, 행이 현재 선택되어 있는지 먼저 확인합니다. 그렇다면 clearSelection() 메소드를 호출하고 리턴하십시오. 그렇지 않으면 super.setSelectionInterval(...)을 호출하십시오.

2

오래되었을 수도 있지만 작동합니다.

table = new JTable() { 
    public void changeSelection(int rowIndex, int columnIndex, boolean toggle, boolean extend) 
    { 
     //Always toggle on single selection 
     super.changeSelection(rowIndex, columnIndex, !extend, extend); 
    } 
}; 
관련 문제