1. package org.jr.swing.table;
  2. /**
  3. * Copyright: Copyright (c) 2002-2004
  4. * Company: JavaResearch(http://www.javaresearch.org)
  5. * 最后更新日期:2003年3月2日
  6. * @author Cherami
  7. */
  8. import javax.swing.table.*;
  9. import org.jr.util.*;
  10. /**
  11. * 可以排序表格模型。
  12. * @since 0.1
  13. */
  14. public class SortableTableModel
  15. extends DefaultTableModel {
  16. int[] indexes;
  17. TableSorter sorter;
  18. /**
  19. * 构造一个SortableTableModel。
  20. * @since 0.1
  21. */
  22. public SortableTableModel() {
  23. }
  24. /**
  25. * 得到排序后的表格单元的值。
  26. * @param row 行
  27. * @param col 列
  28. * @return 得到排序后的表格单元的值。
  29. * @since 0.1
  30. */
  31. public Object getValueAt(int row, int col) {
  32. int rowIndex = row;
  33. if (indexes != null) {
  34. rowIndex = indexes[row];
  35. }
  36. return super.getValueAt(rowIndex, col);
  37. }
  38. /**
  39. * 设置表格单元的值。
  40. * @param value 表格单元的值
  41. * @param row 行
  42. * @param col 列
  43. * @since 0.1
  44. */
  45. public void setValueAt(Object value, int row, int col) {
  46. int rowIndex = row;
  47. if (indexes != null) {
  48. rowIndex = indexes[row];
  49. }
  50. super.setValueAt(value, rowIndex, col);
  51. }
  52. /**
  53. * 按列排序。
  54. * @param column 要排序的列
  55. * @param isAscent 排序方式
  56. * @since 0.1
  57. */
  58. public void sortByColumn(int column, boolean isAscent) {
  59. if (sorter == null) {
  60. sorter = new TableSorter(this);
  61. }
  62. sorter.sort(column, isAscent);
  63. fireTableDataChanged();
  64. }
  65. /**
  66. * 得到排序后的索引数组。
  67. * @return 排序后的索引数组
  68. * @since 0.1
  69. */
  70. public int[] getIndexes() {
  71. int n = getRowCount();
  72. if (indexes != null) {
  73. return indexes;
  74. }
  75. else {
  76. return ArrayUtil.getInitedIntArray(n);
  77. }
  78. }
  79. }