Есть ли способ изменить размер подокна виртуальной клавиатуры JavaFX?
Я называю сцену, к которой принадлежит виртуальная клавиатура, подокном из-за того, как она помечена в Scenic View.
Я разрабатываю приложение, которое будет использовать исключительно виртуальную клавиатуру для ввода текста на планшете Surface 3. Кнопки клавиатуры слишком короткие, чтобы надежно нажимать на экран поверхности из-за разрешения (2160x1440), как показано здесь, размер изменен до ширины 1920: https://i.imgur.com/KP65dlM.png
Применение этого стиля дает мне желаемую высоту кнопки:
.fxvk {
-fx-cursor: default;
-fx-background-color: linear-gradient(to bottom, rgb(126, 126, 126) 0%, rgb(76, 76, 76) 10%, rgb(84, 84, 84) 100%);
-fx-background-insets: 0,0,0,0;
-fx-padding: 8 4 10 4;
-fx-min-height: 400;
Проблема, описанная здесь https://i.imgur.com/x5R7feQ.png, заключается в следующем. что подокно, содержащее виртуальную клавиатуру, должно быть выше для отображения кнопок с измененным размером.
У меня есть способ вернуть ссылку на виртуальную клавиатуру, чтобы я мог настроить прослушиватель в других контроллерах, чтобы скрывать ВК, когда он теряет фокус. Пытаюсь изменить размер ВК, но не могу получить управление атрибутами подокна:
public static PopupWindow getKeyboard() {
@SuppressWarnings("deprecation")
final Iterator<Window> windows = Window.impl_getWindows();
while (windows.hasNext()) {
final Window window = windows.next();
if (window instanceof PopupWindow) {
if (window.getScene() != null && window.getScene().getRoot() != null) {
Parent root = window.getScene().getRoot();
if (root.getChildrenUnmodifiable().size() > 0) {
Node popup = root.getChildrenUnmodifiable().get(0);
if (popup.lookup(".fxvk") != null) {
if (popup instanceof FXVK) {
FXVK keyboard = (FXVK) popup; // reference to the vk skin
keyboard.getScene().heightProperty().add(200); // This increases the height but the vk window does not size to its contents like other windows
PopupWindow test = (PopupWindow) window; // reference to the window with the vk, casted to a PopupWindow
test.getOwnerWindow().setHeight(test.getOwnerWindow().getHeight() + 200); // This increases the height but the vk window does not size to its contents like other windows
return test;
}
}
}
}
return null;
}
}
return null;
}
Команда, с которой я работаю, в настоящее время не может создать пользовательскую виртуальную клавиатуру для приложения из-за нехватки времени, но, вероятно, мы пойдем по этому пути в будущем.