您的位置:首页 > 其它

SWT/JFACE学习积累

2007-10-29 18:38 330 查看
package com.winscad.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.internal.UIPlugin;

import com.swtdesigner.SWTResourceManager;
import com.winscad.bean.DeviceValue;
import com.winscad.bean.ItemInfoInit;
import com.winscad.facade.system.BlackListFacade;
import com.winscad.login.LayoutUtil;
import com.winscad.login.SuperContext;
import com.winscad.view.project.AssetInfoDetail;
import com.winscad.view.system.BlackListView;
public class SelectDevice extends Dialog{

public Table tselectDevice;

public TableViewer tvselectDevice;

String[] colNames=new String[] {
"直放站名称",//直放站名称
"设备厂家",//设备厂家
"设备类型",//设备类型
"业务区"//业务区
};

List deveceList=new ArrayList();
String condition="";

FilterAllAction filterAllAction;

FilterAction_DeviceName filterAction_DeviceName;

FilterAction_FactoryName filterAction_FactoryName;

FilterAction_DeviceCategory filterAction_DeviceCategory;

FilterAction_RegionName filterAction_RegionName;

public SelectDevice(Shell parent) {
super(parent);
}
public void open(){

final Shell parent = getParent();
final Shell selectDevice = new Shell(parent,SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
final BlackListFacade blackListFacade = new BlackListFacade();
selectDevice.setSize(500,360);
selectDevice.setText("直放站选择");//直放站选择
LayoutUtil.centerShell(Display.getCurrent(),selectDevice);

final Label labelPlace = new Label(selectDevice, SWT.NONE);
labelPlace.setText("直放站名称:");//直放站名称
labelPlace.setBounds(25, 18, 70, 15);

final Text devicename=new Text(selectDevice, SWT.NONE|SWT.BORDER);
devicename.setBounds(100, 15, 100, 20);

final Button queryButton=new Button(selectDevice,SWT.NONE);
queryButton.setBounds(205, 15, 50, 20);
queryButton.setText("查询");

//查询所有的直放站
condition+="and a.Status=0";
deveceList=ItemInfoInit.selectDevice(condition);

//实例化表格
tselectDevice=new Table(selectDevice,SWT.BORDER | SWT.SINGLE| SWT.FULL_SELECTION);
tselectDevice.setLinesVisible(true);
tselectDevice.setBounds(25, 37, 500, 252);

final MenuManager menu = new MenuManager();
filterAllAction = new FilterAllAction();
filterAction_DeviceName=new FilterAction_DeviceName();
filterAction_DeviceCategory = new FilterAction_DeviceCategory();
filterAction_RegionName = new FilterAction_RegionName();
filterAction_FactoryName = new FilterAction_FactoryName();
menu.add(new FilterAction());
menu.add(new Separator());
menu.add(filterAllAction);
menu.add(filterAction_DeviceName);
menu.add(filterAction_FactoryName);
menu.add(filterAction_DeviceCategory);
menu.add(filterAction_RegionName);
final Menu m = menu.createContextMenu(selectDevice);

tselectDevice.addMouseListener(new MouseListener(){
public void mouseDoubleClick(MouseEvent e) {
// TODO Auto-generated method stub

}

public void mouseDown(MouseEvent e) {
// TODO Auto-generated method stub
if(e.button == 3){
if(deveceList.size()>0){
IStructuredSelection selection = (IStructuredSelection) tvselectDevice.getSelection();
ItemInfoInit bi = (ItemInfoInit) selection.getFirstElement();
if(bi!=null){
tselectDevice.setMenu(m);
}
}
}
}

public void mouseUp(MouseEvent e) {
// TODO Auto-generated method stub

}

});

//定义表格列
TableColumn deviceName = new TableColumn(tselectDevice, SWT.LEFT);
deviceName.setText(colNames[0]);

TableColumn factoryName = new TableColumn(tselectDevice,SWT.LEFT);
factoryName.setText(colNames[1]);

TableColumn categoryName = new TableColumn(tselectDevice,SWT.LEFT);
categoryName.setText(colNames[2]);

TableColumn regionName = new TableColumn(tselectDevice,SWT.LEFT);
regionName.setText(colNames[3]);

//设置列宽
deviceName.setWidth(100);
factoryName.setWidth(100);
categoryName.setWidth(170);
regionName.setWidth(100);

//实例化表格视图
tvselectDevice = new TableViewer(tselectDevice);
tvselectDevice.getTable().setLinesVisible(true);
tvselectDevice.getTable().setHeaderVisible(true);
tvselectDevice.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));

// 设定表的内容管理器
tvselectDevice.setContentProvider(new IStructuredContentProvider()
{

public Object[] getElements(Object inputElement)
{
//通过输入的数据建表
Vector v = (Vector) inputElement;
return v.toArray();
}

public void dispose()
{
System.out.println("Disposing ...");
}

public void inputChanged(Viewer viewer, Object oldInput,
Object newInput)
{
System.out.println("Input changed: old=" + oldInput
+ ", new=" + newInput);
}
});

// 设定表的标签管理器
tvselectDevice.setLabelProvider(new ITableLabelProvider()
{

public Image getColumnImage(Object element, int columnIndex)
{
return null;
}

public String getColumnText(Object element, int columnIndex)
{
ItemInfoInit init = (ItemInfoInit)element;
switch(columnIndex)
{
case 0:
return init.deviceName;
case 1:
return init.factoryName;
case 2:
return init.categoryName;
case 3:
return init.regionName;
}
return null;
}
public void addListener(ILabelProviderListener listener)
{
// TODO Auto-generated method stub

}

public void dispose() {
// TODO Auto-generated method stub

}

public boolean isLabelProperty(Object element, String property) {
// TODO Auto-generated method stub
return false;
}

public void removeListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub

}
});

tvselectDevice.setColumnProperties(colNames);
final CellEditor[] cellEditors = new CellEditor[4];
cellEditors[0] = new CheckboxCellEditor(tselectDevice, SWT.RADIO);
cellEditors[1] = cellEditors[0];
cellEditors[2] = cellEditors[0];
cellEditors[3] = cellEditors[0];
tvselectDevice.setCellEditors(cellEditors);

tvselectDevice.setCellModifier(new ICellModifier()
{
public boolean canModify(Object element, String property)
{
// TODO Auto-generated method stub
return true;
}

public Object getValue(Object element, String property)
{
// TODO Auto-generated method stub
int index = -1;
for (int i = 0; i < colNames.length; i++)
{
if (colNames[i].equals(property))
{
index = i;
break;
}
}
ItemInfoInit init = (ItemInfoInit)element;
switch(index)
{
case 0:
return init.deviceName;
case 1:
return init.factoryName;
case 2:
return init.categoryName;
case 3:
return init.regionName;
}
return null;
}

public void modify(Object element, String property, Object value)
{
// TODO Auto-generated method stub
System.out.println("Modify: " + element + ", " + property
+ ", " + value);
// Get the index first.
int index = -1;
for (int i = 0; i < colNames.length; i++)
{
if (colNames[i].equals(property))
{
index = i;
break;
}
}
ItemInfoInit init = null;
if (element instanceof Item)
{
TableItem item = (TableItem) element;
init = (ItemInfoInit) item.getData();
}
else
{
init = (ItemInfoInit) element;
}
switch(index)
{
case 0:
init.deviceName=(String)value;
break;
case 1:
init.factoryName=(String)value;
break;
case 2:
init.categoryName=(String)value;
break;
case 3:
init.regionName=(String)value;
break;
}
tvselectDevice.update(init, null);
}
});
tvselectDevice.setInput(deveceList);

//鼠标双击事件
tvselectDevice.getTable().addMouseListener(new MouseAdapter()
{
public void mouseDoubleClick(MouseEvent e)
{
IStructuredSelection selection = (IStructuredSelection) tvselectDevice.getSelection();
ItemInfoInit bi = (ItemInfoInit) selection.getFirstElement();
if(bi!=null){
BlackListView blackListView = (BlackListView)UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(BlackListView.ID);
blackListView.deviceID.setText(bi.deviceName);
SuperContext context=SuperContext.getInstance();
if(context.getViewID().equals(BlackListView.ID)){
String strSignNumber = blackListFacade.queryPhone(bi.deviceid);
if(strSignNumber!=null){
blackListView.signNumber.setText(strSignNumber);
}
}
DeviceValue value=DeviceValue.getInstance();
value.setDeviceID(bi.deviceid);
selectDevice.close();
}
}
});

//查询按钮事件
queryButton.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(devicename.getText()!=null&&!"".equals(devicename.getText())){
condition+="and a.DeviceName like '%"+devicename.getText()+"%'";
deveceList=ItemInfoInit.selectDevice(condition);
tvselectDevice.setInput(deveceList);
}else{
deveceList=ItemInfoInit.selectDevice(condition);
tvselectDevice.setInput(deveceList);
}
}
});

selectDevice.open();
Display display = parent.getDisplay();
while(!selectDevice.isDisposed())
{
if(!display.readAndDispatch())
{
display.sleep();
}
}
}

//筛选类型
public class FilterAction extends Action {

ViewerFilter regionCategoryFilter;

public FilterAction() {
super("筛选类型");// 筛选类型
}

public void run() {
}
}

//全部
public class FilterAllAction extends Action {

ViewerFilter regionCategoryFilter;

public FilterAllAction() {
super("全部", AS_CHECK_BOX);// 全部
}

public void run() {
ViewerFilter[] viewerFilters = tvselectDevice.getFilters();
for (int i = 0; i < viewerFilters.length; i++) {
tvselectDevice.removeFilter(viewerFilters[i]);
}
filterAction_DeviceName.setChecked(false);
filterAction_DeviceCategory.setChecked(false);
filterAction_RegionName.setChecked(false);
filterAction_FactoryName.setChecked(false);

}
}

// 直放站名称
public class FilterAction_DeviceName extends Action {

ViewerFilter deviceNameFilter;

public FilterAction_DeviceName() {
super(colNames[0], AS_CHECK_BOX);
deviceNameFilter = new ViewerFilter() {
public boolean select(Viewer viewer, Object parentElement,
Object element) {
ItemInfoInit regionListInit = (ItemInfoInit) element;
IStructuredSelection selection = (IStructuredSelection) tvselectDevice.getSelection();
ItemInfoInit bi = (ItemInfoInit) selection.getFirstElement();
return regionListInit.deviceName.equals(bi.deviceName);
}
};
this.setChecked(false);
}

public void run() {
if (isChecked()) {
tvselectDevice.addFilter(deviceNameFilter);
} else {
tvselectDevice.removeFilter(deviceNameFilter);
}
tvselectDevice.refresh();
filterAllAction.setChecked(false);
}
}

// 设备类型
public class FilterAction_DeviceCategory extends Action {

ViewerFilter deviceCategoryFilter;

public FilterAction_DeviceCategory() {
super(colNames[2], AS_CHECK_BOX);
deviceCategoryFilter = new ViewerFilter() {
public boolean select(Viewer viewer, Object parentElement,Object element) {
ItemInfoInit regionListInit = (ItemInfoInit) element;
IStructuredSelection selection = (IStructuredSelection) tvselectDevice.getSelection();
ItemInfoInit bi = (ItemInfoInit) selection.getFirstElement();
return regionListInit.categoryName.equals(bi.categoryName);
}

};
this.setChecked(false);
}
public void run() {
if (isChecked()) {
tvselectDevice.addFilter(deviceCategoryFilter);
} else {
tvselectDevice.removeFilter(deviceCategoryFilter);
}
tvselectDevice.refresh();
filterAllAction.setChecked(false);
}
}

//设备厂家
public class FilterAction_FactoryName extends Action {

ViewerFilter factoryNameFilter;

public FilterAction_FactoryName() {
super(colNames[1], AS_CHECK_BOX);
factoryNameFilter = new ViewerFilter() {
public boolean select(Viewer viewer, Object parentElement,Object element) {
ItemInfoInit regionListInit = (ItemInfoInit) element;
IStructuredSelection selection = (IStructuredSelection) tvselectDevice.getSelection();
ItemInfoInit bi = (ItemInfoInit) selection.getFirstElement();
return regionListInit.factoryName.equals(bi.factoryName);
}

};
this.setChecked(false);
}

public void run() {
if (isChecked()) {
tvselectDevice.addFilter(factoryNameFilter);
} else {
tvselectDevice.removeFilter(factoryNameFilter);
}
tvselectDevice.refresh();
filterAllAction.setChecked(false);
}
}
// 归属业务区
public class FilterAction_RegionName extends Action {

ViewerFilter regionNameFilter;

public FilterAction_RegionName() {
super(colNames[3], AS_CHECK_BOX);
regionNameFilter = new ViewerFilter() {
public boolean select(Viewer viewer, Object parentElement,Object element) {
ItemInfoInit regionListInit = (ItemInfoInit) element;
IStructuredSelection selection = (IStructuredSelection) tvselectDevice.getSelection();
ItemInfoInit bi = (ItemInfoInit) selection.getFirstElement();
return regionListInit.regionName.equals(bi.regionName);
}

};
this.setChecked(false);
}

public void run() {
if (isChecked()) {
tvselectDevice.addFilter(regionNameFilter);
} else {
tvselectDevice.removeFilter(regionNameFilter);
}
tvselectDevice.refresh();
filterAllAction.setChecked(false);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: