`
liugang594
  • 浏览: 981473 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Tab键实现表格的跳转

阅读更多

在Excel中,如果按Tab键,则焦点会在相邻的方格中不断的跳转。

 

在SWT的Table或TableTree中,缺省情况下,是不支持这种通过Tab键的跳转的。如果能实现一个这样的功能,是不是很酷?

 

好,这里就教你这一招的实现,使用EditingSupport可以很容易的实现这个功能。

 

这里假设你实现的是一棵树表,并且这个树表要求至少包含SWT.FULL_SELECTION的样式。要求含Full_Selection样子主要是为了实现方便,因为full_selection样式支持鼠标在任意位置对表格的选中,否则只有在被选择行的表格才能被选中。

 

假如这个树已经通过增加EditingSupport实现了编辑支持。下面就是实现Tab键的跳转,实现如下:

 

思路:如果通过点击鼠标,很容易就让CellEditor出现,所以要实现Tab,我们可以通过模拟鼠标点击事件来实现。在SWT中,有两种实现模拟事件的方式,一种是通过Display的post()方法来实现,另一个是widget的notifyListener()方法来实现。这里我要用的notifyListener()。

 

首先给CellEditor的Control增加监听,如下:

cellEditor.getControl().addTraverseListener(this);

 

这里我记EditingSupport实现了TraverseListener,如下:

class FileEditingSupport extends EditingSupport implements TraverseListener

 

最后就是实现keyTraverse()方法,用来模拟鼠标事件:

 

	public void keyTraversed(TraverseEvent e) {
		if(e.character!=SWT.TAB){
			return;
		}
		Rectangle bound = cellEditor.getControl().getBounds();
		Tree tree = (Tree) getViewer().getControl();
		
		int x = bound.x+bound.width+2;
		int y = bound.y;
		if(index==tree.getColumnCount()-1){
			x = tree.getColumn(0).getWidth()-2;
			y = y+bound.height+2;
		}
		
		Event origin = new Event();
		origin.widget = tree;
		origin.x = x;
		origin.y = y;
		origin.display = tree.getDisplay();
		origin.time = e.time;
		origin.count = 1;
		origin.type = SWT.MouseDown;
		origin.button = 1;
		
		tree.notifyListeners(SWT.MouseDown, origin);
	} 

 

对于普通的TextCellEditor和ComboCellEditor,这样做是没什么问题的。不过如果你有一个DialogCellEditor,你就发现失灵的。这是因为DialogCellEditor的control是一个Composite,而得到焦点的是这个Composite上的Button,当你在这上按Tab的时候,是Button收到事件监听而不是底下的Composite得到事件。因为要让DialogCellEditor也能有此功能,我们要多做一点点事情。

 

思路:还是事件模拟,我们要让button上的事件转到control上。

 

实现如下:写一个抽象的DialogCellEditor类,主要是为了实现事件的跳转:

 

public abstract class TraverseDialogCellEditor extends DialogCellEditor implements
		TraverseListener {

	public TraverseDialogCellEditor() {
		super();
	}

	public TraverseDialogCellEditor(Composite parent, int style) {
		super(parent, style);
	}

	public TraverseDialogCellEditor(Composite parent) {
		super(parent);
	}

	@Override
	protected Button createButton(Composite parent) {
		Button button = super.createButton(parent);
		button.addTraverseListener(this);
		return button;
	}

	public void keyTraversed(TraverseEvent e) {
		Event event = new Event();
		event.time = e.time;
		event.character = e.character;
		getControl().notifyListeners(SWT.Traverse, event);
	}

}

 

给button加上TraverseListener,所有它的事件再转到control上。

 

OK了。可以试试效果去了!

 

 

分享到:
评论

相关推荐

    用Enter键代替Tab键

    标题"用Enter键代替Tab键"涉及到一个组件的使用,这个组件可以让用户通过按下Enter键或者上下箭头键来改变控件的焦点,而不是传统的使用Tab键进行切换。这在某些情况下能提高用户体验,特别是对于那些不习惯或不方便...

    java web tab

    java web tab

    winform界面跳转

    通过调整列宽和行高,可以实现灵活的表格布局。 5. **窗体之间的通信**: - 当需要在不同窗体间传递数据时,可以使用属性、事件或者依赖于全局变量。更推荐的方法是使用事件,因为这样可以保持各窗体的封装性,...

    Tab的多种典型用法总结(带动画)

    4. **表格填充**:在Excel或类似的电子表格软件中,Tab键用于在单元格之间移动光标,填充数据或执行公式。按Shift+Tab则可以反向移动。 5. **命令行参数**:在命令行界面,Tab键可以用于命令和文件名的自动补全,...

    Jquery实现的tab效果

    例如,添加图片、表格、列表等元素,或者使用Bootstrap等框架构建更复杂的布局。 四、AJAX加载内容 如果内容是从服务器动态获取的,我们可以使用jQuery的AJAX方法加载。首先,修改HTML结构,将内容区域替换为占位...

    Tab控件的学习

    - 事件处理:可以为Tab控件的切换事件绑定函数,实现切换时的特定功能,如数据更新、页面跳转等。 4. 在不同编程环境中的应用: - MFC:MFC提供CWnd派生类CTabCtrl,通过这个类可以方便地创建和管理Tab控件。 - ...

    Vue中实现回车键切换焦点的方法

    主要介绍了在Vue中实现回车键切换焦点的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    网页设计-第9章-Dreamweaver的表格和网页版面设计.ppt

    向表格中添加数据时,可以使用Tab键、Shift+Tab键和箭头键来移动插入点。例如,要将插入点移动到下一个单元格,可以按Tab键,要将插入点移动到上一个单元格,可以按Shift+Tab键。 9.1.4 导入外部数据 Dreamweaver...

    Excel表格编辑快捷键大全【会计实务操作教程】.pptx

    在工作表内部移动和滚动时,箭头键可以实现单元格间的上下左右移动,Tab键向右移动,Shift+Tab向左移动。Ctrl+箭头键可迅速跳转到当前数据区域的边缘,Home键到达行首,Ctrl+Home键回到工作表起始位置,Ctrl+End键则...

    文档中画出表格软件 排版

    在表格中输入数据后,可以使用上下左右箭头键在单元格之间移动,回车键换行,Tab键则会跳转到下一个单元格。 对于排版,关键在于保持表格的清晰性和一致性。这包括但不限于以下几点: 1. **边框和线条样式**:设置...

    键盘符号非常容易找到的

    - Tab键:用于在表格中跳格或在网页、软件中切换选项。 - Shift键:用于输入上档字符或配合其他键实现特殊功能。 - Ctrl键:常与其他键组合,如Ctrl+C复制,Ctrl+V粘贴。 - Alt键:通常用于快捷菜单或特殊操作。 - ...

    电脑键盘认识[文].pdf

    2. **Tab键**:表格键,用于在文档编辑软件中等距离移动光标,尤其是在处理表格时,可以快速跳转到下一单元格,无需反复敲击空格键。 3. **Caps Lock键**:大写锁定键,用于切换英文输入的大写和小写状态。按下一次...

    一个非常漂亮的多Tab后台管理框架

    3. **路由管理**:为了实现Tab间的平滑切换,框架通常会集成前端路由管理,如React Router或Vue Router,使得状态管理和页面跳转更加灵活。 4. **组件库**:提供丰富的预设组件,如表格、表单、按钮、提示框等,...

    VC++6.0打印表格技术

    - 考虑到表格的对齐方式,可能需要使用TabStops()函数设置制表位。 5. **处理多页**: 如果表格内容超过一页,需要计算每个页面的打印范围。可以使用GetDeviceCaps()函数获取打印机的特性,如每英寸点数(DPI),...

    键盘上的CtrlAltShift等键的读音及其用途.pdf

    这些键通常被称为“功能键”,因为它们与其它键组合使用时可以实现多种快捷操作。 1. **Ctrl键**:读作“控制”键,它的主要用途是与其他键组合以执行特定命令。例如,Ctrl+C用于复制,Ctrl+V用于粘贴,Ctrl+X用于...

    WPS学会使用制表符排版.docx

    首先,不能直接在表格中输入制表符,因为[Tab]键会跳转到下一单元格。可以在表格外面输入制表符,选中它,剪切(或复制),再将光标定位在表格中,粘贴,完成。然后,可以通过工具栏上的"显示/隐藏编辑标记"按钮将...

    Excel表格的163个技巧.docx

    11. **快速切换工作簿**:使用Alt + Tab组合键可以在打开的工作簿之间快速切换。 12. **选定超级链接文本**:单击单元格内的超级链接文本,或者按Ctrl + 鼠标左键点击。 13. **快速查找**:使用“查找和选择”功能...

    office办公软件EXCEL表格2010、2007-应用技巧.pptx

    - **键盘快捷键**:例如Ctrl键用于多选,Shift键用于连续选择,Tab键用于在单元格间移动,Win键用于打开开始菜单,Alt键配合其他键可以访问隐藏的菜单,Del键用于删除内容,End键和Home键分别用于移动到行尾和行首,...

    excel表格基本操作精华

    12. **快速切换工作簿**:在工作簿之间切换,可以使用Alt + Tab组合键,或者在任务栏上点击对应的工作簿窗口。 13. **选定超级链接文本**:双击超级链接文本,可以跳转到链接的目标位置。若要选择超级链接文本,需...

    Excel表格常用快捷键大全.doc

    - 使用箭头键可以在单元格间移动,Ctrl+箭头键则可以快速跳转到数据区域的边缘。 - Home键可以移动到当前行首,Ctrl+Home则移到工作表开头,Ctrl+End移到数据区域的最后一个单元格。 - PageDown 和 PageUp 分别...

Global site tag (gtag.js) - Google Analytics