📄 dbtablecontroller.java
字号:
package com.personnel;
import java.util.Arrays;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
/**
* 定义一个表格模型用于管理实际保存数据库数据的模型, 并实现表格的选择列排序功能
*/
public class DBTableController extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private TableModel model = null;
private Row[] rows = null;
private int column;
/**
* 构造一个表格排序模型
*
* @param m实际保存数据库的表格模型
*/
public DBTableController(TableModel m) {
this.model = m;
int length = m.getRowCount();
this.rows = new Row[length];
for (int i = 0; i < length; i++) {
this.rows[i] = new Row();
this.rows[i].index = i;
}
}
/**
* 对选择的列进行排序
*
* @param c
* 要进行排序的列
*/
public void sort(int c) {
this.column = c;
Arrays.sort(this.rows);
this.fireTableDataChanged();
}
/* 重写实现排序功能的三个方法 */
public Object getValueAt(int r, int c) {
return this.model.getValueAt(this.rows[r].index, c);
}
@Override
public void setValueAt(Object value, int r, int c) {
this.model.setValueAt(value, r, c);
}
@Override
public boolean isCellEditable(int r, int c) {
return this.model.isCellEditable(r, c);
}
/* 重写需要用到的其他方法 */
public int getRowCount() {
return this.model.getRowCount();
}
public int getColumnCount() {
return this.model.getColumnCount();
}
@Override
public Class getColumnClass(int c) {
return this.model.getColumnClass(c);
}
@Override
public String getColumnName(int c) {
return this.model.getColumnName(c);
}
/*
* 这个内部类含有实际保存数据的模型的索引 并实现Comparable接口,用于对模型进行排序
*/
class Row implements Comparable<Row> {
int index;
public int compareTo(Row other) {
Object a = DBTableController.this.model.getValueAt(this.index,
DBTableController.this.column);
Object b = DBTableController.this.model.getValueAt(other.index,
DBTableController.this.column);
if (a instanceof Comparable) {
return ((Comparable) a).compareTo(b);
} else {
return a.toString().compareTo(b.toString());
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -