2016-06-21 1 views
2

TableModel (내 모든 데이터)을 포함하는 JTable이 있습니다. JTable에는 여러 행과 열이 있습니다. 무작위로 행을 임의로 셔플해야합니다. 나는 내가 할 수있는 이해 내가 TableModel에 있던 기존의 JTable의 목록을 얻는 방법을 잘 모릅니다Jtable에서 셔플하는 법

Collections.shuffle(some list from TableModel); 

으로하지만.

은 somebodies 제안에,이

RowSorter<? extends TableModel> sorter = mDocListTable.getRowSorter(); 
    ArrayList<RowSorter.SortKey> list = new ArrayList<RowSorter.SortKey>(); 

    list.add(new RowSorter.SortKey(0, SortOrder.DESCENDING)); 

    Collections.shuffle(list); 
    sorter.setSortKeys(list); 

그러나 didnt 한 작업을 시도했다.

+1

한 가지 방법은 사용자 정의 ['RowSorter'] (https://docs.oracle.com/javase/7/docs/api/javax/swing/RowSorter.html)를 작성하는 것입니다. 'RowSorter'는 컬럼 헤더를 정렬 키로 사용하기 위해 디자인되었으므로 반드시 오버 헤드가 필요하지는 않지만'convertRowIndexToModel (int index)'와'convertRowIndexToView (int index)'메소드는 당신이 원하는 것을하십시오; 단순히 [[0, 1, ..., getRowCount()]'정수리스트를 동일한 정수로 맵핑하는 것을 만들었지 만, 섞여있다. 뷰로 변환 메소드는 매핑 된 값을 반환합니다. – Ironcache

+0

실제로 모델이 수정 된 (보기뿐만 아니라) 테이블을 원한다면 [DefaultTableModel'] (https : // docs.)에서'moveRow (int start, int end, int to)'를 사용할 수도 있습니다. oracle.com/javase/7/docs/api/javax/swing/table/DefaultTableModel.html). – Ironcache

+0

"정수 목록 [0, 1, ..., getRowCount()]을 같은 정수로 매핑하는 것만으로 간단하게 설명해주십시오." 작은 예제가 도움이 될 것입니다. – user1631306

답변

2

이와 비슷한 기능이 있습니까?

DefaultTableModel model = (DefaultTableModel) table.getModel(); 
model.getDataVector().sort((Object o1, Object o2) -> Math.random() > 0.5 ? -1 : 1); 
model.fireTableDataChanged(); 

편집 :Java-7를 들어

.sort()Java-8까지 구현되지 이후, 제 2의 (어쩌면 더 읽기) 옵션이 될 수있다 :

DefaultTableModel model = (DefaultTableModel) table.getModel(); 
Collections.shuffle(model.getDataVector()); 
model.fireTableDataChanged(); 

이는 되돌릴 수 없습니다.

+0

이것은 내 대답보다 낫습니다. 나는 내 대답을 삭제하고 이것을 대신 권장합니다. – Ironcache

+0

람다 식 (IE : Java 8)을 지원하는 Java 버전이 필요합니다. – Ironcache

+0

Object o1, Object o2 – user1631306

관련 문제