?? tableviewerimplbyswt.java
字號:
package net.advanced.eclipse.sample.views;import org.eclipse.swt.SWT;import org.eclipse.swt.custom.CCombo;import org.eclipse.swt.custom.TableEditor;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.graphics.Rectangle;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Event;import org.eclipse.swt.widgets.Listener;import org.eclipse.swt.widgets.ProgressBar;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.forms.widgets.Hyperlink;import org.eclipse.ui.part.ViewPart;/** * @Title: TableViewerImplBySWT.java * @Copyright: * @Company: * @Created on 2005-11-25 14:34:40 * @author sunqh * @version $Revision: 1.11 $ * @since 1.0 */public class TableViewerImplBySWT extends ViewPart{ private Table table; private TableEditor editor; private Text text; private CCombo combo; private Hyperlink link; public void createPartControl(Composite parent){ GridLayout layout=new GridLayout(); GridData gd=new GridData(GridData.FILL_BOTH); gd.grabExcessHorizontalSpace=true; gd.grabExcessVerticalSpace=true; gd.heightHint=0; gd.horizontalIndent=0; gd.widthHint=0; parent.setLayout(layout); parent.setLayoutData(gd); table=new Table(parent,SWT.BORDER|SWT.MULTI); table.setHeaderVisible(true); table.setLinesVisible(true); gd=new GridData(GridData.FILL_BOTH); table.setLayoutData(gd); addColumns(); addItems(); editor=new TableEditor(table); editor.horizontalAlignment=SWT.LEFT; editor.grabHorizontal=true; table.addListener(SWT.MouseDown,new Listener(){ public void handleEvent(Event event){ Rectangle clientArea=table.getClientArea(); Point pt=new Point(event.x,event.y); int index=table.getTopIndex(); while(index<table.getItemCount()){ boolean visible=false; final TableItem item=table.getItem(index); for(int i=0;i<table.getColumnCount();i++){ Rectangle rect=item.getBounds(i); if(rect.contains(pt)){ final int column=i; if(link != null && !link.isDisposed()) link.dispose(); if(text != null && !text.isDisposed()) text.dispose(); if(combo!=null&&!combo.isDisposed()) combo.dispose(); Listener textListener=new Listener(){ public void handleEvent(final Event e){ switch(e.type){ case SWT.FocusOut: if(column==1){ item.setText(column,combo.getText()); combo.dispose(); }else{ item.setText(column,text.getText()); text.dispose(); } break; } } }; if(column==1){ combo=new CCombo(table,SWT.FLAT); combo.addListener(SWT.FocusOut,textListener); combo.add("Male",0); combo.add("Female",1); combo.select(0); editor.setEditor(combo,item,column); combo.setFocus(); }else{ text=new Text(table,SWT.NONE); text.addListener(SWT.FocusOut,textListener); editor.setEditor(text,item,i); text.setText(item.getText(i)); text.selectAll(); text.setFocus(); } return; } if(!visible&&rect.intersects(clientArea)){ visible=true; } } if(!visible) return; index++; } } }); table.addListener (SWT.MouseMove, new Listener () { public void handleEvent (Event event) { Rectangle clientArea = table.getClientArea (); Point pt = new Point (event.x, event.y); int index = table.getTopIndex (); while (index < table.getItemCount ()) { boolean visible = false; final TableItem item = table.getItem (index); for (int i=0; i<=table.getColumnCount (); i++) { Rectangle rect = item.getBounds (i); if (rect.contains (pt)) { if(i==4){ if(link != null && !link.isDisposed()) link.dispose(); if(text != null && !text.isDisposed()) text.dispose(); if(combo!=null&&!combo.isDisposed()) combo.dispose(); link = new Hyperlink(table,SWT.COLOR_WHITE); link.setText("View"); link.setUnderlined(true); link.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); link.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)); editor.setEditor (link, item, i); } return; } if (!visible && rect.intersects (clientArea)) { visible = true; } } if (!visible) return; index++; } } }); } public void addItems(){ TableItem item1=new TableItem(table,SWT.NONE); item1.setText(new String[] { "Richard Sun", "Male", "5000","Xiaoxitian torii,Haidian District,Beijing.","View" }); TableItem item2=new TableItem(table,SWT.NONE); item2.setText(new String[] { "Jacky Root", "Female", "6000","Xiaoxitian torii,Haidian District,Beijing.","View" }); ProgressBar bar=new ProgressBar(table,SWT.HORIZONTAL); bar.setMaximum(10); bar.setSelection(7); editor=new TableEditor(table); editor.grabHorizontal=editor.grabVertical=true; editor.setEditor(bar,item1,5); bar=new ProgressBar(table,SWT.HORIZONTAL); bar.setMaximum(10); bar.setSelection(5); editor=new TableEditor(table); editor.grabHorizontal=editor.grabVertical=true; editor.setEditor(bar,item2,5); } public void addColumns(){ TableColumn employeeName=new TableColumn(table,SWT.LEFT); employeeName.setResizable(true); employeeName.setText("雇員名稱"); employeeName.setWidth(150); TableColumn employeeGender=new TableColumn(table,SWT.CENTER); employeeGender.setResizable(true); employeeGender.setText("雇員性別"); employeeGender.setWidth(70); TableColumn employeeSalary=new TableColumn(table,SWT.LEFT); employeeSalary.setResizable(true); employeeSalary.setText("雇員薪資"); employeeSalary.setWidth(100); TableColumn employeeAddress=new TableColumn(table,SWT.LEFT); employeeAddress.setResizable(true); employeeAddress.setText("雇員聯系方式"); employeeAddress.setWidth(250); TableColumn employeeDetail=new TableColumn(table,SWT.LEFT); employeeDetail.setResizable(true); employeeDetail.setText("雇員照片"); employeeDetail.setWidth(70); TableColumn employeeAuth=new TableColumn(table,SWT.LEFT); employeeAuth.setResizable(true); employeeAuth.setText("雇員信息校驗"); employeeAuth.setWidth(100); } public void setFocus(){ table.setFocus(); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -