我有一个 javafx 应用程序,它应该在 Windows 平板电脑上以全屏模式运行。
我的问题是,当键盘出现时,它是 QWERTY,而我的平板电脑是 AZERTY。
所以问题是:有没有办法使用系统虚拟键盘或将 javafx 虚拟键盘切换到 AZERTY?
最佳答案
我发现你在尝试完成同样的事情时有疑问。 我花了一天时间尝试让 javafx 显示 AZERTY 键盘,我找到了解决方案!
好吧,让我说清楚:javafx 根本没有办法拥有 azerty 键盘,因此您必须稍微修改一下。
下面的解决方案并不完美,您每次更新 javafx 时都必须重复它,但它可以让您对键盘进行极端自定义,远远超出 querty 和 azerty。
解决方案 1(脏但有效)
您需要在 JDK 附带的 javafx 文件中编辑一个文件
步骤:
转到 JDK(在 Mac 中:/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home)
进入 jre/lib/ext 并将名为 jfxrt.jar 的 javafx jar 复制到桌面上的文件夹中。
如果没有EMACS,安装EMACS,然后用这个软件打开复制的jar文件
浏览文件列表搜索 com/sun/javafx/scene/control/skin/TextBoard.txt 该列表是从 A-Z 排序的,所以请使用它(有超过 6000 个文件)。
打开它,您就在这里。将角色更改为让您开心的任何顺序。我加入了 azerty 命令。
保存 jfxrt.jar 并将其复制回原来的位置。完成。
注意:不要尝试提取 jar 并重新压缩它,因为 jdk 保留文件索引列表,它不会工作。
结果:azerty javafx virtual keyboard in action
解决方案 2(干净但我没有完成)
当我深入研究 javafx 类时,我发现负责加载布局键盘的 TextBoard.txt 文件的类是 FXKVSkin 此类旨在接收其他类型的键盘,而不是唯一的 qwerty 默认键盘。 您所要做的就是将此添加到您的代码中:
textFieldThatYouUse.getProperties().put(FXVK.VK_TYPE_PROP_KEY, "mykeyboard");
mykeyboard 是您创建的名为 MykeyboardBoard.txt 的文件,如 TextBoard.txt(大写字母很重要)。
FXKVSkin 现在将查找名为 MykeyboardBoard.txt 的文件,我的冒险就此结束。 您需要让 FXKVSkin 找到您的文件,我尝试在运行时将文件添加到类路径解决方案 Here但它没有用。
如果有人能解决这个问题,请将其添加为答案,这将是一个不那么肮脏的解决方案。
希望这些解决方案对一些非英语人士有所帮助! :p
关于javafx - 将虚拟键盘更改为 AZERTY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31335981/