swt在表格中添加删除事件

来源:互联网 发布:不一样的卡梅拉 知乎 编辑:程序博客网 时间:2024/06/06 00:07
窗体程序package com.pcm.chni.recipereport.frame;import java.util.ArrayList;public class TableViewerDel {protected Shell shell;private String findLinkKey = "FindLink";private List listcuCustomers = new ArrayList();private ArrayList<Hyperlink> delList = new ArrayList<Hyperlink>();private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());private Table table;private TableViewer tableViewer;private boolean finashaddlink=false;/** * Launch the application. *  * @param args */public static void main(String[] args) {try {TableViewerDel window = new TableViewerDel();window.open();} catch (Exception e) {e.printStackTrace();}}/** * Open the window. */public void open() {Display display = Display.getDefault();createContents();shell.open();shell.layout();while (!shell.isDisposed()) {if (!display.readAndDispatch()) {display.sleep();}}}/** * Create contents of the window. */protected void createContents() {shell = new Shell();shell.setSize(450, 300);shell.setText("SWT Application");tableViewer = new TableViewer(shell, SWT.BORDER| SWT.FULL_SELECTION);table = tableViewer.getTable();table.setLinesVisible(true);table.setHeaderVisible(true);table.setBounds(10, 27, 422, 191);TableColumn tableColumn = new TableColumn(table, SWT.NONE);tableColumn.setWidth(100);tableColumn.setText("数据显示");TableColumn tableColumn_1 = new TableColumn(table, SWT.NONE);tableColumn_1.setWidth(100);tableColumn_1.setText("删除");tableViewer.setContentProvider(new RecipereportTableViewContentProvider());//内容器tableViewer.setLabelProvider(new RecipereportTableViewLabelProvider());//标签器listcuCustomers.add("zhangsan");listcuCustomers.add("lis");listcuCustomers.add("wangwu");listcuCustomers.add("liuliu");listcuCustomers.add("qiqi");tableViewer.setInput(listcuCustomers);linkListener();table.addListener(SWT.MeasureItem, new Listener() {//表格监听器 表格画完后设置高度public void handleEvent(Event event) {event.height = 23;}});Listener delayInit = new Listener() {@Overridepublic void handleEvent(Event arg0) {if(table.getItemHeight() < 23 || listcuCustomers.size() == 0 || finashaddlink){return ;}linkListener();finashaddlink = true;}};table.addListener(SWT.MeasureItem, delayInit);}public void linkListener() {deleteAllLinks();//删除所有的删除链接if (listcuCustomers != null && listcuCustomers.size() > 0) {for (int i = 0; i < listcuCustomers.size(); i++) {//获取集合中的数据TableItem itemi = table.getItem(i);//表格中一行数据final Hyperlink hprlnDeleO = formToolkit.createHyperlink(table,"删除", SWT.CENTER);//创建一个删除链接formToolkit.paintBordersFor(hprlnDeleO);TableEditor editor = new TableEditor(table);//编辑tableeditor.grabHorizontal = editor.grabVertical = true;editor.setEditor(hprlnDeleO, itemi, 1);//设置删除链接delList.add(hprlnDeleO);//将删除链接添加到delList中hprlnDeleO.addMouseListener(new MouseAdapter() {@Overridepublic void mouseUp(MouseEvent e) { TableItem xxx = table.getItem(new Point(e.x + hprlnDeleO.getBounds().x, e.y + hprlnDeleO.getBounds().y)); String hhlfir = (String) xxx.getData();//获取点击这一行的数据 listcuCustomers.remove(hhlfir);//点击删除remove listcuCustomers中的数据 tableViewer.setInput(listcuCustomers);//重新set数据 linkListener();//在每一行中添加删除链接}});//hprlnDeleO.setEnabled(true);//将删除按钮设置为启用//hprlnDeleO.setData(findLinkKey, hprlnDeleO);}}}protected void deleteAllLinks() {for (int i = 0; i < delList.size(); i++) {//循环 删除所有删除链接deleteLink(delList.get(i));}delList.clear();//清空list}protected void deleteLink(Hyperlink hprlnk_Delete) {try {if (hprlnk_Delete == null) {return;}hprlnk_Delete.dispose();//摧毁所有的删除链接//Hyperlink findlink = (Hyperlink) hprlnk_Delete.getData(findLinkKey);//if (findlink != null) {//findlink.dispose();//}} catch (Exception ex) {ex.printStackTrace();}}}内容器package com.pcm.chni.recipereport.provider;import java.util.List;import org.eclipse.jface.viewers.IStructuredContentProvider;import org.eclipse.jface.viewers.Viewer;public class RecipereportTableViewContentProvider implements IStructuredContentProvider{@SuppressWarnings("unchecked")@Overridepublic Object[] getElements(Object inputElement) {// TODO Auto-generated method stubif(inputElement instanceof List)            return ((List)inputElement).toArray();        else            return new Object[0];     }@Overridepublic void dispose() {// TODO Auto-generated method stub}@Overridepublic void inputChanged(Viewer arg0, Object arg1, Object arg2) {// TODO Auto-generated method stub}}标签器package com.pcm.chni.recipereport.provider;import org.eclipse.jface.viewers.ILabelProviderListener;import org.eclipse.jface.viewers.ITableLabelProvider;import org.eclipse.swt.graphics.Image;import com.pcm.chni.userManage.model.Customer;public class RecipereportTableViewLabelProvider implements ITableLabelProvider{@Overridepublic Image getColumnImage(Object arg0, int arg1) {// TODO Auto-generated method stubreturn null;}@Overridepublic String getColumnText(Object element, int index) {if(element instanceof Customer){Customer cu=(Customer)element;switch (index) {case 0:return cu.getCustomerid();case 1:return cu.getCustomername();case 2:return cu.getSexid().equals("1")?"男":"女";case 3:return cu.getBirthday();case 4:return cu.getMobile();case 5:return cu.getOrgname();case 6:return cu.getDocname();default:return "--";}}else if(element instanceof String){switch (index) {case 0:return (String)element;default:return "--";}}return null;}@Overridepublic void addListener(ILabelProviderListener arg0) {// TODO Auto-generated method stub}@Overridepublic void dispose() {// TODO Auto-generated method stub}@Overridepublic boolean isLabelProperty(Object arg0, String arg1) {// TODO Auto-generated method stubreturn false;}@Overridepublic void removeListener(ILabelProviderListener arg0) {// TODO Auto-generated method stub}}

0 0