TableEditor 編輯指定列

import org.eclipse.swt.custom.*;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
public class tableTest 
{
	private Shell sShell = null;
	private ViewForm viewForm = null;
	private ToolBar toolBar = null;
	private Composite composite = null;
	private Table table = null;
	private Menu menu = null;
	
	//創建ViewForm面板,放置工具欄和表格
	private void createViewForm()
	{
		viewForm = new ViewForm(sShell,SWT.NONE);
		viewForm.setTopCenterSeparate(true);
		createToolBar();
		viewForm.setTopLeft(toolBar);
		createComposite();
		viewForm.setContent(composite);
	}
	
	private void createToolBar() 
	{
		// TODO Auto-generated method stub
		toolBar = new ToolBar(viewForm,SWT.FLAT);
		
		final ToolItem add = new ToolItem(toolBar,SWT.PUSH);
		add.setText("添加");
		final ToolItem del = new ToolItem(toolBar,SWT.PUSH);
		del.setText("刪除");
		final ToolItem backUp = new ToolItem(toolBar,SWT.PUSH);
		backUp.setText("UP");
		final ToolItem forward = new ToolItem(toolBar,SWT.PUSH);
		forward.setText("下移");
		final ToolItem save = new ToolItem(toolBar,SWT.PUSH);
		save.setText("保存");
	}
	
	private void createComposite() 
	{
		// TODO Auto-generated method stub
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 1;
//		gridLayout.marginWidth=100;
//		gridLayout.marginHeight =60;
		composite = new Composite(viewForm, SWT.NONE);
		composite.setLayout(gridLayout);
		createTable();
		
	}
	
	//創建表格
	private void createTable() 
	{
		// 表格佈局
		GridData gridDate = new GridData();
		gridDate.horizontalAlignment = SWT.FILL;
		gridDate.grabExcessHorizontalSpace = true ;
		gridDate.grabExcessVerticalSpace = true;
		gridDate.verticalAlignment = SWT.FILL;
		
		//創建表格
		table = new Table(composite,SWT.FULL_SELECTION);
		
		table.setHeaderVisible(true);//show the table title
		table.setLayoutData(gridDate);//設置表格佈局
		table.setLinesVisible(true);//設置顯示錶格線
		
		//創建表頭字符串數組
		String[] tableHeader = {"配置項","參  數","配置人","時  間"};
		for(int i=0;i<tableHeader.length;i++)
		{
			TableColumn tableColumn = new TableColumn(table, SWT.CENTER);
			tableColumn.setText(tableHeader[i]);
			tableColumn.setMoveable(true);
		}	
			//增加三行數據
			TableItem item = new TableItem(table, SWT.NONE);
			item.setText(new  String[]{"IP","0.0.0.0","Host","MM-YY-RR:AA-BB-CC"});
			
			item = new TableItem(table, SWT.None);
			item.setText(new String[]{"端口","80","Host","MM-YY-RR:AA-BB-CC"});
			
			item = new TableItem(table, SWT.None);
			item.setText(new String[]{"數據庫","Mysql","Host","MM-YY-RR:AA-BB-CC"});
			
			item = new TableItem(table, SWT.None);
			item.setText(new String[]{"服務器","SSETDDQ","Host","MM-YY-RR:AA-BB-CC"});
			
			TableItem[] items = table.getItems();
			for(int i=0;i<items.length;i++)
			{
				final TableEditor editor = new TableEditor(table);
				final Text text = new Text(table,SWT.None);
				text.setText(items[i].getText(0));
				editor.grabHorizontal = true;
				//關鍵方法
				editor.setEditor(text, items[i], 0);
				text.addModifyListener(new ModifyListener(){

					@Override
					public void modifyText(ModifyEvent e) 
					{
						// TODO Auto-generated method stub
						editor.getItem().setText(2,text.getText());
					}
					
				});
			}
			
			
			
			//重新佈局表格
			for(int i=0;i<tableHeader.length;i++)
			{
				table.getColumn(i).pack();
			}
		
		
		
	}
	//創建主窗口
	private void createSShell()
	{
		sShell = new Shell();
		sShell.setText("Detail Config Dialog Operation");
		sShell.setLayout(new FillLayout());
		int x = 600;
		int y = 300;
		sShell.setLocation(x, y);
		createViewForm();
		createMenu();
	
		sShell.pack();
	}
	
	//添加一個   彈出式  上下文菜單
	private void createMenu() 
	{
		// TODO Auto-generated method stub
		menu = new Menu(sShell,SWT.POP_UP);
		//
		table.setMenu(menu);
		MenuItem del = new MenuItem(menu, SWT.PUSH);
		String delStr = "刪除";
		del.setText(delStr);
		del.addListener(SWT.Selection, new Listener(){
			public void handleEvent(Event e){
				table.remove(table.getSelectionIndices());
			}
		});
		//
		MenuItem view = new MenuItem(menu,SWT.PUSH);
		String viewStr = "查看";
		view.setText(viewStr);
		view.addListener(SWT.Selection, new Listener(){
			public void handleEvent(Event e1){
				TableItem[] items = table.getSelection();
				for(int i=0 ;i<items.length;i++)
					System.out.print(items[i].getText());
			}
				
		});
		
		
	}

	//主函數
	public static void main(String args[])
	{
		Display display = Display.getDefault();
		tableTest  thisclass = new tableTest();
		thisclass.createSShell();
		thisclass.sShell.open();
		while(!thisclass.sShell.isDisposed())
		{
			if(!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}	
	
}

完整代碼


 

 

 

 

TableItem[] items = table.getItems();

           for(int i=0;i<items.length;i++)

           {

              final TableEditor editor = new TableEditor(table);

              final Text text = new Text(table,SWT.None);

              text.setText(items[i].getText(0));

              editor.grabHorizontal = true;

              editor.setEditor(text, items[i], 0);

              text.addModifyListener(new ModifyListener(){

 

                  @Override

                  publicvoid modifyText(ModifyEvent e) 

                  {

                     editor.getItem().setText(2,text.getText());

                  }

                  

              });

當你更改items[i].getText( 0 ));和 editor.setEditor(text, items[i], 0);這個兩個語句的“0”這個參數時,會改變可編輯的列。比如兩處的  0  都改成 1,你就可以更改第二列了。

 

 

 

 

                 

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章