Java 如何禁用JTable上的复制
首先,我必须说我从未在java应用程序上工作过 我被要求防止用户复制(ctrl+c或鼠标右键单击)JTable/JLabel的内容(我没有开发这个java应用程序) 我不能禁用JTable或JLabel,因为必须允许用户编辑它们。我只需要禁用JLabel和/或JLabel上的复制功能 最简单的方法是什么? 我在互联网上读了一些帖子,但我不太了解,因为我从未从事过Java应用程序Java 如何禁用JTable上的复制,java,swing,jtable,jlabel,Java,Swing,Jtable,Jlabel,首先,我必须说我从未在java应用程序上工作过 我被要求防止用户复制(ctrl+c或鼠标右键单击)JTable/JLabel的内容(我没有开发这个java应用程序) 我不能禁用JTable或JLabel,因为必须允许用户编辑它们。我只需要禁用JLabel和/或JLabel上的复制功能 最简单的方法是什么? 我在互联网上读了一些帖子,但我不太了解,因为我从未从事过Java应用程序 谢谢您可以通过调用JTable来覆盖此行为,您似乎已经理解了这一点 编辑单元格时,将激活。要防止在单元格编辑期间复制,
谢谢您可以通过调用JTable来覆盖此行为,您似乎已经理解了这一点 编辑单元格时,将激活。要防止在单元格编辑期间复制,请执行以下操作:
- 创建一个新的JTextField
- 调用JTextField的setTransferHandler方法
- 用这个JTextField
- 在JTable上安装该单元格编辑器:
TransferHandler copyDisabledHandler = new TransferHandler() { @Override public int getSourceActions(JComponent c) { return NONE; } }; JTextField editorField = new JTextField(); editorField.setTransferHandler(copyDisabledHandler); TableCellEditor uncopyableEditor = new DefaultCellEditor(editorField); table.setDefaultEditor(Object.class, uncopyableEditor);
根据TableModel返回的值,您可能需要向setDefaultEditor传递除
Object.class
以外的类,例如String.class
或Integer.class
您可以通过调用JTable来覆盖此行为,您似乎已经理解了JTable
编辑单元格时,将激活。要防止在单元格编辑期间复制,请执行以下操作:
- 创建一个新的JTextField
- 调用JTextField的setTransferHandler方法
- 用这个JTextField
- 在JTable上安装该单元格编辑器:
TransferHandler copyDisabledHandler = new TransferHandler() { @Override public int getSourceActions(JComponent c) { return NONE; } }; JTextField editorField = new JTextField(); editorField.setTransferHandler(copyDisabledHandler); TableCellEditor uncopyableEditor = new DefaultCellEditor(editorField); table.setDefaultEditor(Object.class, uncopyableEditor);
对象.class
以外的类传递给setDefaultEditor,例如字符串.class
或整数.class
您可以使用以下方法禁用JTable上的“Ctrl+C”键绑定:
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(KeyStroke.getKeyStroke("control C"), "none");
您可以使用以下方法禁用JTable上的“Ctrl+C”键绑定:
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(KeyStroke.getKeyStroke("control C"), "none");
我想知道你为什么要这么做?不确定用户是否可以手动创建屏幕截图或键入。我知道,这是一个奇怪的用户请求!!!!我解释了,但是用户想要!你能把你读到的文章链接起来吗。我之前发布的链接似乎已经过时,所以我再次删除了它。(至少javadoc不再提到这些方法中的任何一种)您需要调用JTable。在我看来,这不是Java新手应该完成的任务。@VGR实际上我已经使用了setTransferHandler,如果尝试使用ctrl+c,它就会工作。问题是,如果我双击一个单元格,光标出现,我仍然可以执行ctrl+c。我想知道你为什么要这样做?不确定用户是否可以手动创建屏幕截图或键入。我知道,这是一个奇怪的用户请求!!!!我解释了,但是用户想要!你能把你读到的文章链接起来吗。我之前发布的链接似乎已经过时,所以我再次删除了它。(至少javadoc不再提到这些方法中的任何一种)您需要调用JTable。在我看来,这不是Java新手应该完成的任务。@VGR实际上我已经使用了setTransferHandler,如果尝试使用ctrl+c,它就会工作。问题是,如果我双击一个单元格,光标出现了,我仍然能够执行ctrl+c操作。
control c
适用于Windows和Linux。要确保它也能在Mac上工作,请使用击键。getKeyStroke(KeyEvent.VK_C,Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())
控件C适用于Windows和Linux。要确保它也能在Mac上工作,请使用KeyStroke.getKeyStroke(KeyEvent.VK\u C,Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())
。