Когда я использую термин неактивный узел ниже, я имею в виду то, что не должно иметь возможности взаимодействовать с пользователем.
Я построил общий экран входа в систему, подобный этому:
Одна метка, метка ввода над цифровыми клавишами принимает как ввод с клавиатуры, так и ввод с клавиатуры. В соответствии с тем, как я это разработал, этикетка фиксирует нажатия клавиш на клавиатуре и, следовательно, должна сохранять фокусировку. От пользователя не требуется сохранять фокусировку на этом ярлыке, щелкнув по нему, чтобы он принял нажатия клавиш.
Остальные метки должны быть неактивными: заголовок «ВХОД», сообщение «Ввести номер сотрудника», а также метки даты и времени.
Все кнопки являются интерактивными: цифровые кнопки, кнопка возврата, кнопка очистки, кнопка отправки и кнопка сброса. При нажатии на эти кнопки они редактируют текст метки и возвращают к нему фокус.
Наконец, должны быть неактивные контейнеры, содержащие эти узлы.
Когда отображается этот экран, я хочу, чтобы пользователь мог вводить цифры в метку набора текста, даже если он намеренно пытается убрать фокус с метки. Я мог бы сделать каждый отдельный узел на экране node.mouseTransparent(boolean type);
или node.focusTraversable(boolean type)
, но, похоже, должен быть лучший способ сделать это.
Каков наилучший способ записи нажатий клавиш и управления фокусом на экране, который имеет как неактивные, так и интерактивные узлы, если от пользователя не ожидается управление фокусом?
Я думал сделать что-то вроде этого:
parent.mouseTransparent(true);
interactiveChild.mouseTransparent(false);
поскольку я надеялся, что родительский код будет охватывать ассортимент неактивных дочерних элементов, но интерактивный дочерний элемент остается не кликаемым.