如何禁用 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.class
或 Integer.class
.
您可以使用以下方法在 JTable 上禁用 "Ctrl+C" 键绑定:
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(KeyStroke.getKeyStroke("control C"), "none");
首先,我必须说我从未参与过 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.class
或 Integer.class
.
您可以使用以下方法在 JTable 上禁用 "Ctrl+C" 键绑定:
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(KeyStroke.getKeyStroke("control C"), "none");