在共享表模型示例中工作我意识到如果我们将行过滤器附加到表的行分类器,则此过滤器对单元更新事件没有任何影响.根据RowSorter API:
RowSorter需要引用诸如TableModel或的模型的具体实现ListModel.视图类(如JTable和JList)也将具有对模型的引用.为避免排序依赖项,RowSorter实现不应在模型上安装侦听器.相反,视图类将RowSorter在模型更改时调用.例如,如果在TableModelJTable调用中更新了行rowsUpdated.当模型的变化,该视图可以调用到任何下列方法之一:modelStructureChanged,allRowsChanged,rowsInserted,rowsDeleted和rowsUpdated.
因此,据我理解这一段,单元更新是行更新的特殊情况,因此rowsUpdated应该调用并相应地进行行筛选.
为了说明我在说什么,请考虑这个简单的过滤器:
private void applyFilter() {
DefaultRowSorter sorter = (DefaultRowSorter)table.getRowSorter();
sorter.setRowFilter(new RowFilter() {
@Override
public boolean include(RowFilter.Entry entry) {
Boolean value = (Boolean)entry.getValue(2);
return value == null || value;
}
});
}
Run Code Online (Sandbox Code Playgroud)
在这里,第三列预期是一个Boolean和entry(行)具有被包括如果电池值是null或true.如果我编辑放置在第三列的单元格并将其值设置为,false那么我希望该行只是从视图中"消失".但是,为了实现这一点,我必须再次设置一个新的过滤器,因为它似乎不能"自动"工作.
TableModelListener按如下方式附加到模型,我可以在单元格编辑上看到更新事件: …
我有一堆这种形式的数组:
var myRows = [
[{idx: 0, val: 90}, {idx: 1, val: 75}, {idx: 2, val: 35}],
[{idx: 0, val: 50}, {idx: 1, val: 17}, {idx: 2, val: 95}],
[{idx: 0, val: 10}, {idx: 1, val: 24}, {idx: 2, val: 80}]
// ...
];
Run Code Online (Sandbox Code Playgroud)
让我们说我想按顺序排序第一行val,所以它变成:
[{idx: 2, val: 35}, {idx: 1, val: 75}, {idx: 0, val: 90}]
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来对剩余的数组进行排序,以便它们的顺序与idx排序的第一行的顺序相匹配?
myArrays = [
[{idx: 2, val: 35}, {idx: 1, val: 75}, {idx: 0, val: 90}]
, [{idx: 2, …Run Code Online (Sandbox Code Playgroud) 我有一个网格,但我只想要两列可选的排序,就像我那样做?
RowSorter newSorter = new TableRowSorter(table.getModel());
newSorter.setSortKeys(sortKeys);
table.setRowSorter(newSorter);
Run Code Online (Sandbox Code Playgroud)
我用过这个
我目前在JTable上使用以下方法来对列进行自动排序
table.setAutoCreateRowSorter(true);
Run Code Online (Sandbox Code Playgroud)
这当前允许我单击每个标题,相应的列将对任何带字母的内容进行排序.当它试图对具有整数的列进行排序时,它正在搞乱.它似乎是一次排序每个数字而不是按实际数字排序.例如,它会说8大于100,因为8大于1.有什么方法可以覆盖这种行为吗?
我正在为我的 JTable 使用可排序的列:
table.setAutoCreateRowSorter(true);
Run Code Online (Sandbox Code Playgroud)
问题是在用户单击列标题后无法删除箭头。即使我删除了表中的所有行。
我试图做相反的事情,但没有奏效:
table.setAutoCreateRowSorter(false);
Run Code Online (Sandbox Code Playgroud)