📄 tablecontroller.java
字号:
/*
* Copyright (c) 2008 胜利油田胜利软件有限责任公司. All rights reserved.
*/
package com.victorysoft.swt.base;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
/**
*
* @author 于景洋
* @newtime Oct 31, 2008,1:53:54 PM
* @version 1.0
* @see
* @since JDK 1.5.0
*/
public class TableController {
private Table table;
private Object[][] data;
private Control[][] controls;
private Map<Control, String> map;
public TableController(Table table, Object[][] data) {
if (table == null || data == null) {
throw new IllegalArgumentException("参数不能为空!");
}
this.table = table;
this.data = data;
this.controls = new Control[data.length][data[0].length];
this.map = new HashMap<Control, String>();
for (int i = 0; i < data.length; i++) {
TableItem item = new TableItem(table, SWT.NULL);
for (int j = 0; j < data[i].length; j++) {
item.setText(j, String.valueOf(data[i][j]));
}
}
}
@SuppressWarnings("unchecked")
public void setColumnModel(int col, TableEditor editor, Control control) {
if (control == null) {
return;
}
TableItem[] items = table.getItems();
Class ownerclass1 = control.getClass();
Class ownerclass2 = editor.getClass();
Class[] classes = { Composite.class, int.class };
Object[] objects = { control.getParent(), control.getStyle() };
for (int i = 0; i < items.length; i++) {
Object o1 = Reflector.newInstance(ownerclass1, classes, objects);
Object o2 = Reflector.newInstance(ownerclass2, table);
Control tmpcontrol = (Control) o1;
TableEditor tmpeditor = (TableEditor) o2;
tmpcontrol.setData(this.data[i][col]);
tmpcontrol.setVisible(true);
this.controls[i][col] = tmpcontrol;
this.map.put(tmpcontrol, i + "_" + col);
tmpeditor.grabHorizontal = editor.grabHorizontal;
tmpeditor.grabVertical = editor.grabVertical;
tmpeditor.horizontalAlignment = editor.horizontalAlignment;
tmpeditor.verticalAlignment = editor.verticalAlignment;
tmpeditor.minimumWidth = editor.minimumWidth;
tmpeditor.minimumHeight = editor.minimumHeight;
tmpeditor.setEditor(tmpcontrol, items[i], col);
items[i].setText(col, "");
}
}
/**
* 为指定列的指定控件执行指定方法
*
* @param col
* 列
* @param method
* 执行的方法名
* @param classe
* 执行方法的参数类型
*/
@SuppressWarnings("unchecked")
public void setColumnData(int col, String method, Class clazz) {
for (int i = 0; i < controls.length; i++) {
Reflector.invokeMethod(controls[i][col], method, clazz, data[i][col]);
}
}
/**
* 添加列侦听器
*
* @param col
* 列
* @param method
* 添加侦听器的方法名
* @param clazz
* 侦听方法的参数类型
* @param listener
* 侦听器(要求侦听器必需使用无参构造器)
*/
@SuppressWarnings("unchecked")
public void addColumnListener(int col, String method, Class clazz,
Object listener) {
for (int i = 0; i < controls.length; i++) {
Object rtn = Reflector.invokeMethod(listener, "getTableController");
Object instance = Reflector.newInstance(listener.getClass());
Reflector.invokeMethod(instance, "setTableController", rtn);
Reflector.invokeMethod(controls[i][col], method, clazz, instance);
}
}
public void fireTableDataChanged(Control control, Object object) {
String position = this.map.get(control);
if (position == null || position.length() == 0) {
return;
}
String[] pos = position.split("_");
int row = Integer.parseInt(pos[0]);
int col = Integer.parseInt(pos[1]);
this.data[row][col] = object;
System.out.println(row + "," + col + "," + object);
}
public void show() {
for (int i = 0; i < data.length; i++) {
System.out.println(data[i][1]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -