如何禁用 JTable 上的复制

How to disable copy on a JTable

首先,我必须说我从未参与过 java 申请。

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

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

最简单的方法是什么? 我在互联网上阅读了一些帖子,但由于我从未参与过 Java 应用程序,所以不太了解。

谢谢

您可以通过在 JTable 上调用 setTransferHandler 来覆盖此行为,您似乎已经了解这一点。

编辑单元格时,CellEditor for the column’s class 处于活动状态。要防止在单元格编辑期间进行复制:

  • 创建一个新的 JTextField
  • 调用 JTextField 的 setTransferHandler 方法
  • Create a new DefaultCellEditor 与那个 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 的 getColumnClass method 返回的值,您可能需要将 Object.class 以外的 class 传递给 setDefaultEditor,例如 String.classInteger.class.

您可以使用以下方法在 JTable 上禁用 "Ctrl+C" 键绑定:

InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(KeyStroke.getKeyStroke("control C"), "none");