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,你就可以更改第二列了。