0
点赞
收藏
分享

微信扫一扫

Eclipse SWT table 实现编辑功能

weipeng2k 2023-12-04 阅读 48

		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();
							}
						});
					}
				}
			}
		});

举报

相关推荐

0 条评论