SWT双击table单元格可编辑、变为下拉框

最近一年都是在做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();
						}
					});
				}
			}
		});



  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值