最近一年都是在做plugin开发,碰到的问题也很多,之前碰到个有关table可编辑的,似乎答案甚少,几乎找不到,这里就将自己的经验分享一下。
首先是双击表格,使之变为可编辑框,修改之后恢复默认设置
代码如下:
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(MouseEvent e) {
if(table.getSelectionCount() != 0){
final TableItem item = table.getItem(table.getSelectionIndex());
//获取鼠标点击的位置
Point point = new Point(e.x, e.y);
//鼠标点击所在cell的列
int tmpCol = 0;
//获取所点击的cell
for(int i = 0; i < table.getColumnCount(); i++){
Rectangle rect = item.getBounds(i);
if (rect.contains(point)) {
tmpCol = i;
break;
}
}
final int selectCol = tmpCol;
final TableEditor editor = new TableEditor(table);
Control oldEditor = editor.getEditor();
if (oldEditor != null){
oldEditor.dispose();
}
final Text changeItemText = new Text(table, SWT.NONE);
changeItemText.computeSize(SWT.DEFAULT, table.getItemHeight());
editor.grabHorizontal = true;
editor.minimumHeight = changeItemText.getSize().y;
editor.minimumWidth = changeItemText.getSize().x;
editor.setEditor(changeItemText, item, selectCol);
changeItemText.setText(item.getText(selectCol));
changeItemText.forceFocus();
//编辑后变回表格样式
changeItemText.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent focusevent) {
Control defaultEditor = editor.getEditor();
editor.setEditor(defaultEditor, item, selectCol);
item.setText(selectCol, changeItemText.getText());
changeItemText.dispose();
}
});
}
}
});
有了这个基础,要将其变为下拉框就无限简单了,只需要将Text替换为Combo就完事了,下面是修改后的图片。
修改后的代码如下
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(MouseEvent e) {
if(table.getSelectionCount() != 0){
final TableItem item = table.getItem(table.getSelectionIndex());
//获取鼠标点击的位置
Point point = new Point(e.x, e.y);
//鼠标点击所在cell的列
int tmpCol = 0;
//获取所点击的cell
for(int i = 0; i < table.getColumnCount(); i++){
Rectangle rect = item.getBounds(i);
if (rect.contains(point)) {
tmpCol = i;
break;
}
}
final int selectCol = tmpCol;
final TableEditor editor = new TableEditor(table);
Control oldEditor = editor.getEditor();
if (oldEditor != null){
oldEditor.dispose();
}
//这里只需讲Text换成Combo就行
//final Text changeItemText = new Text(table, SWT.NONE);
final Combo comOptionValue = new Combo(table, SWT.NONE);
//对Combo进行赋值
comOptionValue.setItems(new String[]{"选项1","选项2","选项3","选项4"});
comOptionValue.computeSize(SWT.DEFAULT, table.getItemHeight());
editor.grabHorizontal = true;
editor.minimumHeight = comOptionValue.getSize().y;
editor.minimumWidth = comOptionValue.getSize().x;
editor.setEditor(comOptionValue, item, selectCol);
comOptionValue.setText(item.getText(selectCol));
comOptionValue.forceFocus();
//编辑后变回表格样式
comOptionValue.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent focusevent) {
Control defaultEditor = editor.getEditor();
editor.setEditor(defaultEditor, item, selectCol);
item.setText(selectCol, comOptionValue.getText());
comOptionValue.dispose();
}
});
}
}
});