Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何禁用JTable上的复制_Java_Swing_Jtable_Jlabel - Fatal编程技术网

Java 如何禁用JTable上的复制

Java 如何禁用JTable上的复制,java,swing,jtable,jlabel,Java,Swing,Jtable,Jlabel,首先,我必须说我从未在java应用程序上工作过 我被要求防止用户复制(ctrl+c或鼠标右键单击)JTable/JLabel的内容(我没有开发这个java应用程序) 我不能禁用JTable或JLabel,因为必须允许用户编辑它们。我只需要禁用JLabel和/或JLabel上的复制功能 最简单的方法是什么? 我在互联网上读了一些帖子,但我不太了解,因为我从未从事过Java应用程序 谢谢您可以通过调用JTable来覆盖此行为,您似乎已经理解了这一点 编辑单元格时,将激活。要防止在单元格编辑期间复制,

首先,我必须说我从未在java应用程序上工作过

我被要求防止用户复制(ctrl+c或鼠标右键单击)JTable/JLabel的内容(我没有开发这个java应用程序)

我不能禁用JTable或JLabel,因为必须允许用户编辑它们。我只需要禁用JLabel和/或JLabel上的复制功能

最简单的方法是什么? 我在互联网上读了一些帖子,但我不太了解,因为我从未从事过Java应用程序


谢谢

您可以通过调用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);
    
根据TableModel返回的值,您可能需要将除
对象.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())