我被要求编辑其他人开发的Java桌面应用程序。我以前从未研究过Java桌面应用程序。
有一个JTable,我必须防止用户执行CTRL + C并复制单元格的值。我做的。
问题在于,当用户双击单元格并出现光标时(如您从图片中看到的那样)
我无法阻止用户执行CTRL + C。我该怎么做?
最佳答案
问题是当用户双击单元格并出现光标时
焦点不再放在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);