【发布时间】:2015-07-10 08:29:18
【问题描述】:
我有一个 javafx 应用程序,它应该在 Windows 平板电脑上以全屏模式运行。
我的问题是,当键盘出现时,它是 QWERTY 而我的平板电脑是 AZERTY。
那么问题来了:有没有办法使用系统虚拟键盘或者将javafx虚拟键盘切换到AZERTY?
【问题讨论】:
标签: javafx javafx-8 keyboard-layout azerty-keyboard
我有一个 javafx 应用程序,它应该在 Windows 平板电脑上以全屏模式运行。
我的问题是,当键盘出现时,它是 QWERTY 而我的平板电脑是 AZERTY。
那么问题来了:有没有办法使用系统虚拟键盘或者将javafx虚拟键盘切换到AZERTY?
【问题讨论】:
标签: javafx javafx-8 keyboard-layout azerty-keyboard
我在尝试完成同样的事情时发现了您的问题。 我花了一天时间尝试让 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 该列表从 A-Z 排序,因此请使用它(有超过 6000 个文件)。
打开它,你就在这里。将字符更改为任何让您开心的顺序。我加入了azerty命令。
保存 jfxrt.jar 并将其复制回原来的位置。完成。
注意:不要尝试解压 jar 并重新压缩它,因为 jdk 保留了文件的索引列表,所以它不起作用。
结果:azerty javafx virtual keyboard in action
解决方案 2(干净但我没有完成)
当我深入研究 javafx 类时,我发现负责加载布局键盘的 TextBoard.txt 文件的类是 FXKVSkin 此类旨在接收除 lonly qwerty 默认键盘之外的其他类型的键盘。 你所要做的就是在你的代码中添加这个:
textFieldThatYouUse.getProperties().put(FXVK.VK_TYPE_PROP_KEY, “我的键盘”);
mykeyboard 是您创建的文件,例如 TextBoard.txt,名为 MykeyboardBoard.txt(大写字母很重要)。
FXKVSkin 现在将查找名为 MykeyboardBoard.txt 的文件,这就是我的冒险结束的地方。 您需要让 FXKVSkin 找到您的文件,我尝试在运行时解决方案 Here 处将文件添加到类路径,但没有成功。
如果有人可以解决这个问题,请将其添加为答案,这将是一个不那么肮脏的解决方案。
希望这些解决方案能帮助一些不会说英语的人! :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 文件。
【讨论】: