【问题标题】:In what scenario would consume() restore default behavior?在什么情况下,consume() 会恢复默认行为?
【发布时间】:2014-06-25 00:19:40
【问题描述】:

将以下代码合并到一个简单的程序中时,当处于编辑模式时,它会在 JTable 的单元格内停止光标移动(使用左/右箭头时)。

        public void keyPressed(KeyEvent e) {  
            if ( (e.getKeyCode() == KeyEvent.VK_KP_LEFT) ||  (e.getKeyCode() == KeyEvent.VK_KP_RIGHT)  
                                    || (e.getKeyCode() == KeyEvent.VK_RIGHT) || (e.getKeyCode() == KeyEvent.VK_LEFT) )   
            {  
                //Do nothing  
                e.consume();  
            }  
        }             
    });   

使用上面的相同代码覆盖不同程序中的不同行为会出现意外结果。

在合并代码之前,左/右箭头键会在编辑模式下移动到下一个单元格。合并上面的代码后,恢复了默认行为,而不是像基本示例中那样禁用左/右键。

由于无法提供示例,我想知道在什么情况下 e.consume() 会恢复默认功能?

【问题讨论】:

  • 请添加一段简单而实用的代码,向代码提供哪些输入,代码的输出是什么,以及您期望什么。
  • 可能在组件使用首选key bindings API 时
  • -1,交叉发布:coderanch.com/t/635617/GUI/java/… 并且 OP 不会按照要求发布 SSCCE,并且已经提到了键绑定并且教程已经链接到。

标签: java swing


【解决方案1】:

在进一步挖掘和反编译第 3 方代码后,行为更加清晰。

主应用程序 (MyApp) 使用了 JTable。 JTable 中的单元格使用自定义单元格编辑器 (MyEditor)。

自定义单元格编辑器 (MyEditor) 使用第 3 方对象进行编辑 (3rdPartyObj_1)

第 3 方对象 (3rdParyObj_1) 扩展了另一个第 3 方对象 (3rdPartyObj_2)

第 3 方对象 (3rdParyObj_2) 扩展了 JComponent。

第 3 方对象 (3rdParyObj_2) 处理调用: 进程键事件 以及调用: super.processKeyEvent

原帖中列出的代码放在 MyEditor 对象中。

作为测试,我创建了自己的类 My_JComponent 并扩展了 JComponent。 该方法是 processKeyEvent ,它不做任何事情。 (当然我可以简单地注释掉对 super 的调用,但这让我可以玩得更远。)

如果 JComponent 阻止调用 processKeyEvent,那么在编辑模式下光标键移动在字符之间移动时,一切都会按预期工作。基本上我什至不需要上面的代码。

它几乎出现在 JComponent 将箭头键自动处理为制表键或默认处理时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多