📄 beanbindedtablemodel.java
字号:
/**
*
*/
package net.sf.component.table;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
/**
* 每行记录代表一个 JavaBean 实例
*
* $Id: BeanBindedTableModel.java 844 2005-09-12 03:18:14Z yflei $
* Created Date: 2005-7-22
* @author SimonLei
*/
public abstract class BeanBindedTableModel extends AbstractBindedTableModel {
public int searchPropertyIndex(String property, String name, int startIndex) {
return -1;
}
public BeanBindedTableModel(List datas) {
super(datas);
}
public ICellModifier getCellModifier(BindedTableViewer viewer) {
return new BeanBindedTableCellModifier( this, viewer);
}
public String getColumnText(Object element, int columnIndex) {
if ( columnIndex >= propertyNames.size()) return "XXX";
try {
Object obj = getPropertyByReflect( element, propertyNames.get( columnIndex));
return getColumn( columnIndex).getLabelText( obj);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 根据 propertyName 的方法,来获得 element 这个对象的 property
* @param element 对象
* @param propertyName 属性名,注意第一个字符大写。
* @return element 对象的 Property 值
*/
public static Object getPropertyByReflect( Object element, String propertyName) throws IllegalAccessException, InvocationTargetException, SecurityException, NoSuchFieldException {
try {
return getPropertyByReflect( "get", element, propertyName);
} catch (NoSuchMethodException e) {
try {
return getPropertyByReflect( "is", element, propertyName);
} catch (NoSuchMethodException e2) {
return getProperty( element, propertyName);
}
}
}
private static Object getProperty(Object element, String propertyName) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
final Field declaredField = element.getClass().getDeclaredField( propertyName);
return declaredField.get( element);
}
/**
* 根据 prefix + propertyName 的方法,来获得 element 这个对象的 property
* @param prefix 前缀,通常是 get,但对boolean变量,是is
* @param element 对象
* @param propertyName 属性名,注意第一个字符大写。
* @return element 对象的 Property 值
*/
public static Object getPropertyByReflect( String prefix, Object element, String propertyName)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
Method method = element.getClass().getMethod(
prefix + propertyName, new Class[]{});
return method.invoke( element, new Object[]{});
}
@Override
public Listener getSortedListener(final BindedTableViewer viewer) {
return new Listener(){
public void handleEvent(Event event) {
//非编辑模式下可按列排序
// if(!viewer.getModel().isEditable()){
Table table = viewer.getTableViewer().getTable();
TableColumn tc=(TableColumn) event.widget;
boolean asc = table.getSortDirection() == SWT.DOWN ? true:false;
Collections.sort(viewer.getModel().getRows(), new DefaultBeanComparator((String) tc.getData(),asc));
viewer.refresh(true);
table.setSortColumn(tc);
table.setSortDirection(asc?SWT.TOP:SWT.DOWN);
}
// }
};
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -