kle*_*tra 17
鼠标单击到更改排序状态的映射在BasicTableHeaderUI中实现,并且仅通过RowSorter的toggleSortOrder(columnIndex)进行.它的默认行为是切换
UNSORTED - > ASCENDING - > DESCENDING - > ASCENDING -
也就是说,没有办法回到UNSORTED.如果要求只是将圆圈扩展为:
UNSORTED - > ASCENDING - > DESCENDING - UNSORTED - > ASCENDING -
要走的路是子类TableRowSorter并相应地覆盖它的toggleSortOrder
/**
* @inherited <p>
*/
@Override
public void toggleSortOrder(int column) {
List<? extends SortKey> sortKeys = getSortKeys();
if (sortKeys.size() > 0) {
if (sortKeys.get(0).getSortOrder() == SortOrder.DESCENDING) {
setSortKeys(null);
return;
}
}
super.toggleSortOrder(column);
}
Run Code Online (Sandbox Code Playgroud)
注意:这有点简化,因为它没有考虑n-ary排序列,请参阅SwingX DefaultSortController获取完整版本.或者使用SwingX开始,它的JXTable有api来配置排序周期
table.setSortOrderCycle(ASCENDING, DESCENDING, UNSORTED);
Run Code Online (Sandbox Code Playgroud)
干杯珍妮特
如果您使用DefaultRowSorter
:“空sortKeys
列表表示视图应该未排序,与模型相同。”
RowSorter rs = table.getRowSorter();
rs.setSortKeys(null);
Run Code Online (Sandbox Code Playgroud)
附录:请注意,“null
是指定空列表的简写” setSortKeys()
。
此代码实现循环 ASCENDING->DESCENDING->UNSORTED->... 而不覆盖 TableRowSorter:
TableRowSorter sorter = new TableRowSorter(getModel());
setRowSorter(sorter);
// Remove default sort MouseListener
for (MouseListener mouseListener : getTableHeader().getMouseListeners()) {
if (mouseListener instanceof javax.swing.plaf.basic.BasicTableHeaderUI.MouseInputHandler) {
getTableHeader().removeMouseListener(mouseListener);
}
}
// Add MouseListener for onClick event
getTableHeader().addMouseListener(new MouseAdapter() {
private SortOrder currentOrder = SortOrder.UNSORTED;
@Override
public void mouseClicked(MouseEvent e) {
int column = getTableHeader().columnAtPoint(e.getPoint());
RowSorter sorter = getRowSorter();
List sortKeys = new ArrayList();
switch (currentOrder) {
case UNSORTED:
sortKeys.add(new RowSorter.SortKey(column, currentOrder = SortOrder.ASCENDING));
break;
case ASCENDING:
sortKeys.add(new RowSorter.SortKey(column, currentOrder = SortOrder.DESCENDING));
break;
case DESCENDING:
sortKeys.add(new RowSorter.SortKey(column, currentOrder = SortOrder.UNSORTED));
break;
}
sorter.setSortKeys(sortKeys);
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9421 次 |
最近记录: |