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
今日推荐
周排行