📄 sortfiltermodel.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: SortFilterModel.java
package org.apache.struts2.components.table;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableModel;
// Referenced classes of package org.apache.struts2.components.table:
// AbstractFilterModel, SortableTableModel
public class SortFilterModel extends AbstractFilterModel
implements TableModelListener, SortableTableModel
{
private class Row
implements Comparable
{
public int index;
final SortFilterModel this$0;
public int compareTo(Object other)
{
Row otherRow = (Row)other;
Object a = model.getValueAt(index, sortColumn);
Object b = model.getValueAt(otherRow.index, sortColumn);
boolean areTheyCompareable = (a instanceof Comparable) && (b instanceof Comparable) && a.getClass() == b.getClass();
if (areTheyCompareable)
return ((Comparable)a).compareTo((Comparable)b);
else
return a.toString().compareTo(b.toString());
}
public Row(int index)
{
this$0 = SortFilterModel.this;
super();
this.index = index;
}
}
private static final long serialVersionUID = 0x1eba82a302b62c7dL;
private ArrayList rows;
private String _sortDirection;
private boolean dirty;
private int sortColumn;
public SortFilterModel(TableModel tm)
{
super(tm);
rows = new ArrayList();
_sortDirection = "NONE";
dirty = true;
sortColumn = -1;
setModel(tm);
}
public boolean isCellEditable(int r, int c)
{
if (rows.size() > 0 && r < rows.size())
return model.isCellEditable(((Row)rows.get(r)).index, c);
else
return false;
}
public void setModel(TableModel tm)
{
super.setModel(tm);
rows.ensureCapacity(model.getRowCount());
model.addTableModelListener(this);
sortColumn = -1;
dirty = true;
refresh();
}
public int getSortedColumnNumber()
{
return sortColumn;
}
public String getSortedDirection(int columnNumber)
{
if (getSortedColumnNumber() < 0)
return "NONE";
else
return _sortDirection;
}
public void setValueAt(Object aValue, int r, int c)
{
if (rows.size() > 0 && r < rows.size())
model.setValueAt(aValue, ((Row)rows.get(r)).index, c);
}
public Object getValueAt(int r, int c)
{
if (rows.size() > 0 && r < rows.size())
return model.getValueAt(((Row)rows.get(r)).index, c);
else
return null;
}
public void addMouseListener(final JTable table)
{
table.getTableHeader().addMouseListener(new MouseAdapter() {
final JTable val$table;
final SortFilterModel this$0;
public void mouseClicked(MouseEvent event)
{
if (event.getClickCount() < 2)
{
return;
} else
{
int tableColumn = table.columnAtPoint(event.getPoint());
int modelColumn = table.convertColumnIndexToModel(tableColumn);
sort(modelColumn);
return;
}
}
{
this$0 = SortFilterModel.this;
table = jtable;
super();
}
});
}
public void removeRow(int rowNum)
throws ArrayIndexOutOfBoundsException, IllegalStateException
{
int mappedRow = ((Row)rows.get(rowNum)).index;
super.removeRow(mappedRow);
}
public void sort(int columnNumber, String direction)
{
_sortDirection = "ASC";
dirty = true;
sort(columnNumber);
if ("DESC".equals(direction))
{
sort(columnNumber);
_sortDirection = "DESC";
}
}
public void tableChanged(TableModelEvent e)
{
dirty = true;
refresh();
fireTableChanged(e);
}
protected void refresh()
{
rows.clear();
for (int i = 0; i < model.getRowCount(); i++)
rows.add(new Row(i));
if (dirty && sortColumn > -1)
sort(sortColumn);
}
protected void sort(int c)
{
boolean sorted = sortColumn == c;
sortColumn = c;
if (dirty || !sorted)
{
Collections.sort(rows);
dirty = false;
} else
{
Collections.reverse(rows);
}
fireTableDataChanged();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -