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