⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sortfiltermodel.java

📁 struts 2 核心包 的源码 有错误是难免的
💻 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 + -