📄 sorttablecolumnhandler.java
字号:
package com.canoo.ulc.onlineshop.controller;
import com.canoo.ulc.onlineshop.model.SortedTableModel;
import com.canoo.ulc.onlineshop.util.Constants;
import com.canoo.ulc.onlineshop.util.IconFactory;
import com.ulcjava.base.application.ULCListSelectionModel;
import com.ulcjava.base.application.event.ActionEvent;
import com.ulcjava.base.application.event.IActionListener;
import com.ulcjava.base.application.table.DefaultTableHeaderCellRenderer;
import com.ulcjava.base.application.table.ULCTableColumn;
import java.io.Serializable;
/**
* This class is an example handler for sorting table columns and displaying proper icons in the table header.
* <p/>
* Note: It is assumed that the installed table header renderers are <code>DefaultTableHeaderCellRenderer</code>.
*
* @author Etienne.Studer@canoo.com
*/
public class SortTableColumnHandler implements IActionListener, Serializable {
private SortedTableModel fTableModelSorter;
private ULCListSelectionModel fSelectionModel;
private ULCTableColumn fLastSortedColumn;
public SortTableColumnHandler(SortedTableModel tableModelSorter, ULCListSelectionModel selectionModel) {
this(tableModelSorter, selectionModel, null);
}
public SortTableColumnHandler(SortedTableModel tableModelSorter, ULCListSelectionModel selectionModel, ULCTableColumn lastSortedColumn) {
fTableModelSorter = tableModelSorter;
fSelectionModel = selectionModel;
fLastSortedColumn = lastSortedColumn;
}
public void actionPerformed(ActionEvent event) {
ULCTableColumn column = (ULCTableColumn)event.getSource();
int[] realRows = getSelectedRows();
sortTableData(column);
setSelectedRows(realRows);
updateHeaderIcons(column);
}
private void sortTableData(ULCTableColumn column) {
if (fLastSortedColumn != column) {
fTableModelSorter.sort(new int[]{column.getModelIndex()}, true);
} else {
fTableModelSorter.sort(!fTableModelSorter.isAscending());
}
}
private void updateHeaderIcons(ULCTableColumn newColumn) {
if (fLastSortedColumn != null) {
DefaultTableHeaderCellRenderer renderer = getHeaderRenderer(fLastSortedColumn);
renderer.setIcon(null);
fLastSortedColumn.setHeaderRenderer(renderer);
}
DefaultTableHeaderCellRenderer renderer = getHeaderRenderer(newColumn);
renderer.setIcon(IconFactory.getIcon(fTableModelSorter.isAscending() ? Constants.UP_ICON : Constants.DOWN_ICON));
newColumn.setHeaderRenderer(renderer);
fLastSortedColumn = newColumn;
}
private DefaultTableHeaderCellRenderer getHeaderRenderer(ULCTableColumn column) {
DefaultTableHeaderCellRenderer renderer = (DefaultTableHeaderCellRenderer)column.getHeaderRenderer();
if (renderer == null) {
return new DefaultTableHeaderCellRenderer();
}
return renderer;
}
private int[] getSelectedRows() {
int[] mappedRows = fSelectionModel.getSelectedIndices();
int[] realRows = new int[mappedRows.length];
for (int i = 0; i < mappedRows.length; i++) {
realRows[i] = fTableModelSorter.getRealRow(mappedRows[i]);
}
return realRows;
}
private void setSelectedRows(int[] realRows) {
for (int i = 0; i < realRows.length; i++) {
int mappedRow = fTableModelSorter.getMappedRow(realRows[i]);
fSelectionModel.addSelectionInterval(mappedRow, mappedRow);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -