【发布时间】:2016-06-21 17:04:25
【问题描述】:
我有一个 JTable,其中包含 TableModel(我的所有数据)。 JTable 有多个行和列。我需要随机洗牌。我知道我可以用
Collections.shuffle(some list from TableModel);
但我不知道如何从现有的具有 TableModel 的 JTable 中获取列表。
根据某人的建议,我尝试了这个
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);
但没用。
【问题讨论】:
-
我相信一种方法是创建一个自定义
RowSorter。RowSorter的设计目的是使用列标题作为排序键,因此您不一定需要一些额外的开销,但convertRowIndexToModel(int index)和convertRowIndexToView(int index)方法应该可以满足您的需求;只需创建整数列表[0, 1, ..., getRowCount()]到相同整数但被打乱的映射。 convert to view 方法会返回映射的值。 -
虽然如果你真的想修改模型中的表(不仅仅是视图),你也可以在
DefaultTableModel中使用moveRow(int start, int end, int to)。 -
您能否详细说明“只需创建整数列表 [0, 1, ..., getRowCount()] 到相同整数但经过改组的映射”。一个小例子会有所帮助
标签: java jtable tablemodel