Как включить операции копирования и вырезания в поле Java Disabled - PullRequest
0 голосов
/ 12 ноября 2018

Я занимаюсь разработкой программного обеспечения, в котором клиентский запрос на все отключенные текстовые поля должен иметь возможность выполнять операции выделения текста, вырезания и копирования. Но сейчас не удается продолжить из-за какой-то проблемы. Поле ввода, которое соответствует требованиям, должно быть текстовым полем, доступным только для чтения, которое может выполнять выделение текста и копировать / вырезать с помощью сочетания клавиш Ctrl + C, и при щелчке по текстовому полю оно не должно вызывать никакого прослушивателя Focus / Action.

Ранее все отключенные компоненты отключались через

component.setEnabled (булево)

Но при этом все отключенные поля не могут выполнять операции выделения текста, вырезания и копирования. Я пробовал несколько способов включить операции копирования и вырезания, но обнаружил, что компонент не обрабатывает какое-либо ключевое событие в этом состоянии, похоже, оно связано с Component.enableEvents (long) Я подозреваю, что этот метод позволит контейнер для отправки KeyEvent компоненту, но этот метод недоступен из моего проекта.

Итак, я изменил все компоненты для использования

JComponent.setEditable (булево)

Но проблема этого метода в том, что все отключенные компоненты сработают FocusListener , этого не должно происходить, потому что все отключенные поля должны быть доступны только для чтения и иметь нулевое влияние на другие существующие поля. Есть ли способ включить операции вырезания и копирования, не используя FocusListener для запуска с помощью setEditable или есть другой более простой способ?

(И любой может помочь объяснить, как событие от компонента перехватывается и отправляется? Включите, как Java выполняет проверку, когда keyEvent должен / не должен отправлять дочерний компонент и есть ли способ, которым мы можем обойти те, которые проверяют и позволяют компоненту processKeyEvent, когда поле отключено).

1 Ответ

0 голосов
/ 13 ноября 2018

но эти данные и вычисления должны выполняться только в том случае, если включено поле ввода

Почему это проблема?

Если вы используете общий прослушиватель, общий для всех компонентов, просто добавьте проверку, чтобы увидеть, является ли компонент редактируемым.

Если вы используете отдельных слушателей для каждого компонента, вы не добавляете слушателя к компоненту, если он не редактируется.

Мне не хватает, почему это огромное усилие.

как событие от компонента перехватывается и отправляется?

Возможно, вы сможете использовать пользовательский KeyboardFocusManager. Возможно, переопределите метод dispatchEvent(...), чтобы предотвратить отправку событий в ваших конкретных случаях.

...