📄 assigndetailtablemodel.java
字号:
/**
*
*/
package flow.graph.gui.graph.cell.ui.table;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;
public class AssignDetailTableModel extends AbstractTableModel {
//private static final long serialVersionUID = -7495940408592595397L;
private static final String[] columnNames = new String[]{"目的类型", "目的变量", "标识", "来源类型", "来源变量", "自定义" };
private static final Class[] column_class = { String.class, String.class, Boolean.class, String.class, String.class, String.class};
private Vector content = null;
public AssignDetailTableModel() {
content = new Vector();
}
public AssignDetailTableModel(int count) {
content = new Vector(count);
}
public void addRow(String destName, String destItemName, boolean flag, String srcName, String srcItemName, String define) {
Vector v = new Vector(6);
v.add(0, destName);
v.add(1, destItemName);
v.add(2, new Boolean(flag));
v.add(3, srcName);
v.add(4, srcItemName);
v.add(5, define);
content.add(v);
this.fireTableDataChanged();
}
public void removeRow(int row) {
if(row < content.size()){
content.remove(row);
this.fireTableDataChanged();
}
}
public void removeRows(int row, int count) {
for (int i = 0; i < count; i++) {
if (content.size() > row) {
content.remove(row);
}
}
this.fireTableDataChanged();
}
/**
* 让表格中某些值可修改,但需要setValueAt(Object value, int row, int col)方法配合才能使修改生效
*/
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
/**
* 使修改的内容生效
*/
public void setValueAt(Object value, int row, int col) {
((Vector) content.get(row)).remove(col);
((Vector) content.get(row)).add(col, value);
this.fireTableCellUpdated(row, col);
}
public String getColumnName(int col) {
return columnNames[col];
}
public int getColumnCount() {
//return CondictionTable._InputHeader.length;
return columnNames.length;
}
public int getRowCount() {
return content.size();
}
public Object getValueAt(int row, int col) {
return ((Vector) content.get(row)).get(col);
}
/**
* 返回数据类型
*/
public Class getColumnClass(int col) {
//预先已经知道该列的类型,故可以引用静态变量返回
return column_class[col];
//return getValueAt(0, col).getClass();
}
protected Vector convertToVector(String destName, String destItemName, boolean flag, String srcName, String srcItemName, String define) {
Vector v = new Vector();
v.addElement(destName);
v.addElement(destItemName);
v.addElement(new Boolean(flag));
v.addElement(srcName);
v.addElement(srcItemName);
v.addElement(define);
return v;
}
public void insertRow(int row, String destName, String destItemName, boolean flag, String srcName, String srcItemName, String define) {
insertRow(row, convertToVector(destName, destItemName,flag,srcName,srcItemName,define));
}
public void insertRow(int row, Vector rowData) {
content.insertElementAt(rowData, row);
justifyRows(row, row+1);
fireTableRowsInserted(row, row);
}
private void justifyRows(int from, int to) {
// Sometimes the DefaultTableModel is subclassed
// instead of the AbstractTableModel by mistake.
// Set the number of rows for the case when getRowCount
// is overridden.
content.setSize(getRowCount());
for (int i = from; i < to; i++) {
if (content.elementAt(i) == null) {
content.setElementAt(new Vector(), i);
}
((Vector)content.elementAt(i)).setSize(getColumnCount());
}
}
public void moveRow(int start, int end, int to) {
int shift = to - start;
int first, last;
if (shift < 0) {
first = to;
last = end;
}
else {
first = start;
last = to + end - start;
}
rotate(content, first, last + 1, shift);
fireTableRowsUpdated(first, last);
}
private static int gcd(int i, int j) {
return (j == 0) ? i : gcd(j, i%j);
}
private void rotate(Vector v, int a, int b, int shift) {
int size = b - a;
int r = size - shift;
int g = gcd(size, r);
for(int i = 0; i < g; i++) {
int to = i;
Object tmp = v.elementAt(a + to);
for(int from = (to + r) % size; from != i; from = (to + r) % size) {
v.setElementAt(v.elementAt(a + from), a + to);
to = from;
}
v.setElementAt(tmp, a + to);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -