创建表格(带有可编辑的单元格——文本和下拉框)

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
public class E{
	public static void main(String[] args){
		Display display=new Display();
		Shell shell=new Shell(display);
		shell.setText("创建表格(带有可编辑的单元格——文本和下拉框)");	
		shell.setLayout(new GridLayout());

		//(1)创建一个表格Table
		//Table table=new Table(shell,SWT.FULL_SELECTION);//全选一行
		Table table=new Table(shell,SWT.CHECK);//带有选择框
		//(2)表头数组
		String tableHeader[]={"第一列","第2列"};
		for(int i=0;i<tableHeader.length;i++){
			TableColumn tableColumn=new TableColumn(table,SWT.None);
			tableColumn.setText(tableHeader[i]);
		}
		//设置显示表头
		table.setHeaderVisible(true);
		//(3)添加行数据TableItem
		TableItem item=new TableItem(table,SWT.None);
		item.setText(new String[]{"第一行第一列","第一行第2列"});
		item=new TableItem(table,SWT.None);
		item.setText(new String[]{"第2行第一列","第2行第2列"});		
		//(4)布局调整
		for(int i=0;i<table.getColumnCount();i++){
			table.getColumn(i).pack();
		}
		
		//添加一个可以编辑的单元格
		TableItem[] items=table.getItems();
		for(int i=0;i<items.length;i++){
			//第一列设置,创建TableEditor对象(即可以编辑的单元格)
			final TableEditor tableEditor=new TableEditor(table);
			//创建一个文本框,用于输入文字
			final Text text=new Text(table,SWT.None);
			//将文本框当前值设置为表格中的值(某行的第一列)
			text.setText(items[i].getText(0));
			//设置编辑单元格水平填充
			tableEditor.grabHorizontal=true;
			//关键方法,将编辑单元格与文本框绑定到表格的第一列(将控件与某一个单元格绑定)
			tableEditor.setEditor(text,items[i],0);
			//可编辑的单元格在哪里(在表格某行的第一列)。为什么可以编辑(因为这个单元格和文本框绑定在一起了)
			
			
			//当文本框改变值时,注册文本框改变事件,该事件改变表格中的数据
			//否则即使改变文本框的值,对表格中的数据也不会影响
			text.addModifyListener(new ModifyListener(){
				public void modifyText(ModifyEvent e){
					tableEditor.getItem().setText(0,text.getText());
					//tableEditor.getItem()==TableItem表各项,0表示某一列
				}
			});
			//虽然单元格绑定了相对应的编辑控件,但是控件和表格是相互独立的
			//想要改变编辑控件就改变了表格中的数据,	
			
			
			//同理,为第二列绑定下拉框CCombo
			//创建一个可编辑的单元格对象
			final TableEditor tableEditor1=new TableEditor(table);
			//创建一个下拉框
			final CCombo ccombo=new CCombo(table,SWT.None);
			ccombo.add("男生");
			ccombo.add("女生");
			//将下拉框当前值设置为表格中的值(某行的第二列)
			ccombo.setText(items[i].getText(1));
			//设置编辑单元格水平填充
			tableEditor1.grabHorizontal=true;
			//将编辑单元格与下拉框进行绑定
			tableEditor1.setEditor(ccombo,items[i],1);
			//可编辑单元框在哪里(表格的某行的第二列),可编辑框为何可编辑(与下拉框绑定)
			ccombo.addModifyListener(new ModifyListener(){
				public void modifyText(ModifyEvent e){
					tableEditor1.getItem().setText(1,ccombo.getText());
				}
			});
		}
		
		//打开窗口,进行窗口的显示
		shell.setSize(300,150);
		//shell.pack();
		shell.open();
		while(!shell.isDisposed()){
			//当窗口没有被释放的时候
			if(!display.readAndDispatch()){
				display.sleep();
			}		
		}
		display.dispose();
	}
}

猜你喜欢

转载自blog.csdn.net/grace_1203/article/details/80176944
今日推荐