`
liugang594
  • 浏览: 990792 次
  • 性别: 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键进行切换。这在某些情况下能提高用户体验,特别是对于那些不习惯或不方便...

    精彩编程与编程技巧-把回车键变成TAB键...

    例如,在Excel表格中录入数据时,自动跳转到下一个单元格。 ### 知识点五:注意事项 #### 5.1 兼容性问题 虽然这种方法在大多数情况下有效,但在某些特定的应用场景下可能会遇到兼容性问题。例如,某些控件可能不...

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

    用户界面中经常会涉及到键盘操作,例如使用Tab键和Enter键来切换焦点。但实际情况下,用户需求千变万化,有时候用户会提出使用回车键Enter来切换焦点的需求,这在某些表单操作中非常常见。因此,了解如何在Vue项目中...

    CTab.rar_Tabú

    "CTab.rar_Tabú"这个压缩包文件可能包含一系列关于Tab键使用的教程或资料,虽然标签"tabú"在西班牙语中意味着禁忌,但这可能是一个有趣的比喻,暗示Tab键的使用在某些情况下可能被忽视或者未被充分利用。...

    java web tab

    java web tab

    winform界面跳转

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

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

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

    Jquery实现的tab效果

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

    javascript回车完美实现tab切换功能

    该功能的实现允许用户在使用小键盘输入数据时不必切换到物理键盘的tab键,提高了输入效率,并且用户体验得到改善。同时,它也减少了对物理键盘的依赖,使得在平板或触摸屏设备上进行数据输入变得更加友好。 需要...

    Tab控件的学习

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

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

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

    完整版近在眼前-老表格不用回车按光标键即可退出编辑.rar

    标题“完整版近在眼前-老表格不用回车按光标键即可退出编辑.rar”以及描述中的信息,暗示了一个关于电子表格软件的技巧,特别是如何更有效地在单元格间移动和编辑数据,而不必频繁使用回车键。在这个场景中,用户...

    完整版表格在编辑状态时不需要按回车即可直接用光标键退出编辑并移动光标.rar

    例如,通过宏命令,可以将某个键(如Tab键)设置为在编辑完单元格后立即移动光标,而不需要按回车。这对于需要快速填充或校对表格的人来说,无疑是一个非常实用的定制化选项。 在实际应用中,这个特性可以广泛应用...

    TaskOne.rar_Table

    在处理表格时,用户通常需要通过键盘上的Tab键来进行焦点转换,从一个单元格跳转到另一个单元格。然而,有时为了提高用户体验或特定场景的需求,我们可能会考虑使用Enter键替代Tab键来实现这种焦点转换。下面我们将...

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

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

    电子表格服务器常用登陆

    这通常出现在登录界面的表单填写中,当用户输入完某一字段后,按TAB键即可自动跳转到下一个输入框,无需使用鼠标点击,提高了输入效率。 综上所述,电子表格服务器的常用登录方法需要考虑安全性与便捷性的平衡,这...

    Excel表格的基本操作.doc

    9. **在同一单元格内连续输入**:如果希望在单元格内连续输入多个值,而不要每次输入后自动跳转,可以使用Alt+Enter键代替回车,这样可以在同一单元格内换行输入。 这些基础技巧能帮助用户更有效地使用Excel 2003,...

    文档中画出表格软件 排版

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

    键盘按键与显示

    `DISPLAY`子程序负责此任务,它从预定义的表格`TAB`中查找对应的字符编码,然后将其发送到显示缓冲区(地址`#8004H`),以实现字符的显示。 为了更清晰地理解这一过程,我们看到`DISPLAY`子程序首先定位到表格中的...

    键盘符号非常容易找到的

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

Global site tag (gtag.js) - Google Analytics