⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beanbindedtablemodel.java

📁 Eclipse RCP下编写的工作管理软件代码
💻 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 + -