table_2.addMouseListener(new MouseAdapter() {//给需要编辑的表格增加监听
@Override
public void mouseDoubleClick(MouseEvent e) {//鼠标双击时触发
if(table_2.getSelectionCount() != 0){
final TableItem item = table_2.getItem(table_2.getSelectionIndex());
//获取鼠标点击的位置
Point point = new Point(e.x, e.y);
//鼠标点击所在cell的列
int tmpCol = 0;
//获取所点击的cell;
for(int i = 0; i < table_2.getColumnCount(); i++){
Rectangle rect = item.getBounds(i);
if (rect.contains(point)) {
tmpCol = i;
break;
}
}
rowIndex = table_2.getTopIndex();
while (rowIndex < table_2.getItemCount()) {
Rectangle rect = table_2.getItem(rowIndex).getBounds(0); // 这里以第一列为例
if (rect.contains(point)) {
break;
}
rowIndex++;
}
System.out.println("编辑行" + rowIndex);
final int selectCol = tmpCol;
if (selectCol == 0 || selectCol == 1) {//这里可以控制哪些列可以编辑
final TableEditor editor = new TableEditor(table_2);
Control oldEditor = editor.getEditor();
if (oldEditor != null){
oldEditor.dispose();
}
final Text changeItemText = new Text(table_2, SWT.NONE);
changeItemText.computeSize(SWT.DEFAULT, table_2.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.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent modifyEvent) {
missions.clear();
for (TableItem tableItem : table_2.getItems()) {
Map<String, String> mission = new HashMap<>();//使命任务
int index = table_2.indexOf(tableItem);//行号
System.out.println("编辑行" + rowIndex);
System.out.println("当前行" + index);
// 获取每一行的第一列和第二列的值
String key = tableItem.getText(0);
String value = tableItem.getText(1);
if (selectCol == 0) {
if (changeItemText.getParent() == table_2 && rowIndex == index) {
mission.put(changeItemText.getText(), value);
}else {
mission.put(key, value);
}
}else if (selectCol == 1) {
if (changeItemText.getParent() == table_2 && rowIndex == index+1) {
mission.put(key, changeItemText.getText());
}else {
mission.put(key, value);
}
}
missions.add(mission);
}
createTableFile();
}
});
//编辑后变回表格样式
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();
}
});
}
}
}
});