如何在Jtable中洗牌

时间:2016-06-21 17:04:25

标签: java jtable tablemodel

我有一个包含TableModel(我的所有数据)的JTable。 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);

但没有工作。

1 个答案:

答案 0 :(得分: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才实现,因此第二个(可能更具可读性)选项可能是:

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

这无法恢复。