在JTable上禁用CTRL + C(在双单击单元格之后)

时间:2019-05-30 08:51:34

标签: java swing jtable

已要求我编辑其他人开发的Java桌面应用程序。我以前从未研究过Java桌面应用程序。

有一个 JTable ,我必须阻止用户执行 CTRL + C 并复制单元格的值。我做到了。

问题在于,当用户双击单元格并出现光标时(如您从图片中看到的那样)enter image description here

我无法阻止用户执行CTRL + C。我该怎么办?

2 个答案:

答案 0 :(得分:3)

  

问题在于,当用户双击单元格并出现光标时

焦点不再位于JTable上。它在单元格的编辑器上,恰好是JTextField。因此,您需要删除文本字段的复制功能。

您可以通过在文本字段上删除“控件C”的键绑定来完成此操作:

DefaultCellEditor editor = (DefaultCellEditor)table.getDefaultEditor(Object.class);
JTextField textField = (JTextField)editor.getComponent();
InputMap im = textField.getInputMap();
im.put(KeyStroke.getKeyStroke("control C"), "none");

您将需要为表中的每种编辑器类型执行此操作。例如,如果您具有Integer值,则需要获取Integer.class的编辑器,并同时删除其键绑定。

注意,除了对表使用以下InputMap之外,可以对表使用相同的方法:

InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);

答案 1 :(得分:2)

拿走他们的键盘!

好的,这可能是有问题的。如果不需要用户编辑表,则可以尝试使表不可编辑。除了让您重新思考其中的许多示例之外,我将向您介绍this guide on doing it和有关如何Disable user edit in JTable的StackOverflow问题。

或者,您可以研究覆盖键绑定。我从来没有亲自做过,所以给你一个linktwo以及JTable Key Bindings上的一个StackOverflow问题。

您还可以通过从java.awt.toolkit访问系统剪贴板来做一些聪明的事情。可能是,每当用户编辑单元格时,他们的剪贴板都被设置为空字符串,或者(如果您不想弄乱正在编辑单元格的人,但又不想复制它们),则可以将其与键盘绑定结合使用认为他们正在复制数据,但最终粘贴“抱歉。此应用程序不允许复制。”

希望这里有用。