我有一个 javafx 应用程序,它应该在 Windows 平板电脑上以全屏模式运行。
我的问题是,当键盘出现时,它是 QWERTY,而我的平板电脑是 AZERTY。
所以问题是:有没有办法使用系统虚拟键盘或将javafx虚拟键盘切换到AZERTY?
我有一个 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,请安装它并使用此软件打开复制的 jar 文件
浏览文件列表搜索 com/sun/javafx/scene/control/skin/TextBoard.txt 该列表从 AZ 排序所以使用它(有超过 6000 个文件)。
打开它,你就在这里。将字符更改为任何让您开心的顺序。我加入了azerty命令。
保存并将 jfxrt.jar 复制回原来的位置。完毕。
注意:不要尝试解压 jar 并重新压缩它,因为 jdk 会保留文件的索引列表,所以它不会起作用。
解决方案2(干净但我没有完成)
当我深入研究 javafx 类时,我发现负责加载布局键盘的 TextBoard.txt 文件的类是 FXKVSkin 此类旨在接收除 lonly qwerty 默认键盘之外的其他类型的键盘。你所要做的就是在你的代码中添加这个:
textFieldThatYouUse.getProperties().put(FXVK.VK_TYPE_PROP_KEY, "mykeyboard");
其中 mykeyboard 是您创建的文件,例如 TextBoard.txt,名为 MykeyboardBoard.txt(大写字母很重要)。
FXKVSkin 现在将查找名为 MykeyboardBoard.txt 的文件,这就是我的冒险结束的地方。您需要让 FXKVSkin 找到您的文件,我尝试在运行时解决方案的类路径中添加一个文件,但它没有用。
如果有人可以解决此问题,请将其添加为答案,这将是一个不那么肮脏的解决方案。
希望这些解决方案能帮助一些不会说英语的人!:p
布局的定义包含在 jfxrt.jar(Java 安装的一部分)中。它由 描述TextBoard.txt
。可以使用 7zip 或类似程序浏览 jfxrt.jar。TextBoard.txt
在com/sun/javafx/scene/control/skin/
这个文件被加载com/sun/javafx/scene/control/skin/FXVKSkin.java
负责加载TextBoard.txt
文件。浏览 javafx 源(通过 jdk 包含并包含在 中javafx-src.zip
)以查看它是如何处理的。也许这会给你足够的信息来加载你自己的 TextBoard.txt 文件。