在什么情况下,consume()会恢复默认行为?

时间:2014-06-25 00:19:41

标签: java swing

将以下代码合并到一个简单的程序中时,当处于编辑模式时,如果需要,它会阻止光标移动(当使用左/右箭头时)在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()恢复默认功能的场景是什么?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

第三方对象(3rdParyObj_2)处理呼叫:     processKeyEvent 以及电话:     super.processKeyEvent

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

作为测试,我创建了自己的类My_JComponent和扩展的JComponent。 方法是processKeyEvent,它不做任何事情。 (当然我可以简单地评论出对超级电话的调用,但这让我可以进一步发挥。)

如果JComponent阻止调用processKeyEvent,则所有工作都按预期工作,其中光标键移动在编辑模式下的字符之间移动。基本上我甚至不需要上面的代码。

几乎看起来JComponent自动将箭头键作为制表键处理或作为默认处理。