在Tab键按下的Jtable中,将焦点从一个单元格转移到另一个单元格 - java

摘要:

在我的桌面应用程序中,我加载了一个Jtable,并且在编辑模式下(如果我按Tab键)我需要将单元格的焦点移到下一个单元格上。

问题:
当我编辑单元格的值,然后按Tab时,焦点丢失。我在网上进行了一些搜索,发现发生这种情况是因为在每个Tab上按下Jtable都会重新加载自身。

可能的解决方案
我正在考虑的一种解决方案是获取我正在工作的单元格的索引,将其与全局变量相同,然后在Tab键上按一下,我可以获取下一个单元格的索引并集中于该单元格。
不知何故,它不起作用。

请提出建议。

提前致谢..

参考方案

我想起来,我想通过在keystrokeInputMap选项卡中使用自定义的ActionMap实现克服了这一问题。

我们使用的实现允许我们执行“连续”编辑,也就是说,当用户按下Enter或Tab键时,我们移至下一个可编辑单元格并开始编辑

InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
ActionMap am = table.getActionMap();

KeyStroke tabKey = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);

Action moveNextCellAction = am.get(im.get(tabKey));

ContinousEditAction continousEditAction = new ContinousEditAction(table, moveNextCellAction);

im.put(tabKey, "Action.tab");

am.put("Action.tab", continousEditAction);

ContinousEditAction负责查找下一个可编辑的单元格。基本上,当操作被触发时,您可以通过JTable.getEditingRowJTable.getEditingColumn方法来盘点当前单元格(您还希望通过JTable.isEditing检查表是否处于编辑模式,否则需要使用JTable.getSelectedRow和-实际上,您可能只是这样做而已,但这是我解决问题的方式)。

从那里开始,您要遍历单元格,直到找到可编辑的单元格。

基本上,您要检查到当前行的末尾,然后移至下一行直到不存在更多行,这取决于您要执行的操作,您可以选择循环回到表的开头(单元格0x0)并步行直到到达当前位置。

注意,如果不注意:P,您可能会陷入连续循环。

如果找不到任何可编辑的单元格,则可能只希望使用JTable.getSelectedColumnJTable.setRowSelectionInterval选择下一个可用的单元格,否则可以调用JTable.setRowSelectionInterval

但这一切都取决于您要实现的目标。

另外,您可以将相同的想法应用于Enter键;)

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。

Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…