Отключить CTRL + C на JTable (после двойного щелчка по ячейке) - PullRequest
0 голосов
/ 30 мая 2019

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

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

Проблема в том, что когда пользователь дважды щелкает ячейку и появляется курсор (как вы можете видеть на рис.) enter image description here

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

Ответы [ 2 ]

3 голосов
/ 30 мая 2019

Проблема в том, что когда пользователь дважды щелкает ячейку и появляется курсор

Фокус больше не находится на 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);
2 голосов
/ 30 мая 2019

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...