Swing的JTable默认Tab键为横向移动单元格焦点,Enter键为纵向移动单元格焦点。在实际使用时不符合我们的操作习惯,而网上很多文章只是点到为止,没有详细说明。

经过自己的不断试验,以下代码实现了在表格中,用Enter键代替Tab键的功能,且焦点会自动跳过不能编辑的单元格。

    /** 内部类,移动单元格焦点,当下一个单元格不能编辑时则跳过,直到移动到可编辑的焦点。* 如果焦点为最后一行最后一列,则新焦点移动到第一行第一列。*/class TableAction extends AbstractAction {public void actionPerformed(ActionEvent e) {selCol = InsertTable.this.getSelectedColumn();selRow = InsertTable.this.getSelectedRow();rowCount = InsertTable.this.getRowCount();columnCount = InsertTable.this.getColumnCount();/** 如果移动后的新单元格不能编辑则继续循环,直到新单元格可编辑则跳出循环。* selCol和selRow的值为新行列值*/do {if (selCol == columnCount - 1) {if (selRow == rowCount - 1) {selRow = 0;selCol = 0;} else {selRow += 1;selCol = 0;}} else {selCol += 1;}} while (!InsertTable.this.isCellEditable(selRow, selCol));/** 如果因为各种原因(主要是原单元格编辑器的stopCellEditing方法返回false)导致* 新焦点单元格不能启动编辑,则焦点任停留在原单元格。* 否则将移动到新单元格。*/if (InsertTable.this.editCellAt(selRow, selCol)) {InsertTable.this.changeSelection(selRow, selCol, false, false);}}}

在继承JTable的类构造方法中添加如下代码,这样在创建实例时可保证Enter键代替Tab键的功能。

public class InsertTable extends JTable {public InsertTable() {
super.getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("ENTER"), "moveFocus");super.getActionMap().put("moveFocus", new TableAction());
}

注意:如果表格中的单元格都不能编辑,将按键映射放在构造方法中会造成死循环。

建议最好是将按键映射设为独立方法,在表格构造时根据实际情况确定是否启用

JTable使用Enter键代替Tab键移动单元格焦点相关推荐

  1. 使用Enter键代替Tab键的功能

    使用Enter键代替Tab键的功能 <%@ Page language="c#" Inherits="示例代码._19.WebForm1" CodeFil ...

  2. 空格键 还是 Tab键?

    本文转载至:http://www.solidot.org/story?sid=49551 缩进时使用空格键还是Tab键,这不是一个小问题.在HBO的喜剧片<硅谷>第三季中,不同的缩进风格导 ...

  3. 【ipad+向日葵远程控制】解决ipad上在向日葵中无法使用上下左右键、Tab键(解决方法是:在ipad上安装旧版本向日葵11.2.2,配合使用的是罗技K380键盘)

    目录 参考链接 需要用到的3个工具(都是在Windows电脑上操作的) 开始配置 1. iTunes登录自己的账号 2. 安装旧版本 2.1 iTunes中打开向日葵APP的页面,然后把 iTunes ...

  4. linux终端删除键失灵,ubuntu服务器新建用户后,上下键删除键tab键失效,提示符只有$解决办法...

    最近用ubunut新建普通用户后,出现上下键删除键tab键失效,提示符只有$的问题. 我的创建方法是: useradd ss passwd ss 当我用ss账号登录时出现上述问题. 解决办法1:用ad ...

  5. C#实现用Enter键和Tab键同样功能

    在Form_Load中输入如下代码: foreach(Control ctrl in this.Controls)  {      if ((ctrl is TextBox) || (ctrl is  ...

  6. 让Enter键实现Tab键的功能

    开发环境:VS.NET 2005, .net framework 2.0; 开发语言: C# 2.0 窗体设计器生成的代码(Form1.Designer.cs) namespace  MyTest { ...

  7. 按Enter键起到Tab键的效果

    private void userstxt_KeyDown(object sender, KeyEventArgs e)         {             if (e.KeyCode == ...

  8. Altium Designer中空格键、TAB键,X,Y失效

    原文档链接:Altium Designer快捷键失效恢复方法 症状:   在AD中,正常的情况是在拖动元件时,如果按下空格键,可以旋转元件:如果按下TAB键,可以打开配置窗口,等等.本例描述一种错误, ...

  9. 用Enter键取代tab键

    1. this.TextBox1.Attributes.Add("OnKeyPress","<script>if keycode==13 keycode=9; ...

最新文章

  1. 判断h5是不是在小程序中
  2. [转]Android敏捷开发指南
  3. convertViewsetTag方法的一点理解
  4. 使用Consul做服务发现的若干姿势
  5. EF 更新大量的数据时出现重复键错误
  6. mysql 排序1.1.1_mysql中字符串1.1/1.2/1.2.2/1.2.5排序问题
  7. spring-boot(2)--环境搭建
  8. 利用有限自动机进行字符串匹配
  9. idea 设置代码的颜色
  10. H5 下载文件到本地
  11. VB功能模块:最全的VB操作网页功能模块
  12. 安装ansys时出现问题 MS.NET Framework would you like to retry?的解决办法:
  13. Java 提供给第三方使用接口方法
  14. 浅析微信小程序生命周期之应用生命周期
  15. IDEA类左侧有一个对勾,如何去掉对勾?
  16. alternate端口什么意思_alternate是什么意思_alternate在线翻译_英语_读音_用法_例句_海词词典...
  17. 卧槽!百度网盘 VIP 可以免费白嫖了!亲测有效!!!
  18. git 名词解释和常用术语(二)
  19. java 打码_Java基础(一)
  20. distribute-list

热门文章

  1. GOPS北京站盛况空前,优维科技如约而至(内附老王精彩演讲PPT)
  2. C语言:什么是头文件
  3. JavaScript中获取文本框数据的方法
  4. python三人同行七十稀_三人同行七十稀,五树梅花廿一枝,七子团圆正半月,除百零五便得知.这句诗的诗意....
  5. vue前端项目老缺少XXX文件,或者XXX文件丢失错误,最好的解决办法
  6. 跨部门沟通难题--高手项目经理和PMO如何解决?【可乐洞察】
  7. CNN网络介绍与实践:王者荣耀英雄图片识别
  8. 机器学习-02 模型的评估与选择
  9. latex缩进与对齐_LaTex学术写作——设置段落 行间距 段间距 文本对齐方式
  10. SAP HANA XS ODATA简介