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();
}
}
创建表格(带有可编辑的单元格——文本和下拉框)
最新推荐文章于 2024-08-07 09:26:20 发布