Отключить CTRL+C в JTable (после двойного щелчка по ячейке)

Меня попросили отредактировать настольное приложение Java, разработанное другими. Я никогда раньше не работал над настольным Java-приложением.

Есть JTable, и я должен запретить пользователю выполнять CTRL+С и копировать значение ячейки. Я сделал это.

Проблема в том, что когда пользователь дважды щелкает ячейку и появляется курсор (как вы можете видеть на картинке) Отключить CTRL+C в JTable (после двойного щелчка по ячейке)

Я не могу запретить пользователю делать CTRL+C. Как мне это сделать?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
219
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Уберите их клавиатуру!

Хорошо, это может быть проблематично. Если вам не нужны пользователи для редактирования таблицы, вы можете попробовать сделать таблицу нередактируемой. Вместо того, чтобы повторять один из многих примеров по этому поводу, я оставлю вам это руководство как это сделать и вопрос StackOverflow о том, как Отключить редактирование пользователя в JTable .

В качестве альтернативы вы можете изучить переопределение привязок клавиш. Я никогда не делал этого лично, поэтому я оставляю вам связь или два и вопрос StackOverflow на Привязки клавиш JTable.

Вы также можете сделать что-то умное, обратившись к системному буферу обмена из java.awt.toolkit. Может быть, когда пользователь редактирует ячейку, его буфер обмена устанавливается на пустую строку или (если вы не хотите, чтобы люди редактировали ячейки, но не пытались их скопировать), вы могли бы объединить это с сочетаниями клавиш, чтобы они думают, что они копируют данные, но в итоге вставляют «Извините, копирование в этом приложении запрещено».

Надеюсь, здесь что-то работает.

Ответ принят как подходящий

The problem is that when the user double clicks a cell and the cursor appears

Фокус больше не на JTable. Он находится в редакторе ячейки, которая является JTextField. Поэтому вам нужно удалить функцию копирования текстового поля.

Вы делаете это, удаляя привязку клавиш для «Control 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.class и также удалить привязку его ключа.

Обратите внимание, что тот же подход можно использовать для таблицы, за исключением того, что для таблицы используется следующий InputMap:

InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);

Другие вопросы по теме