3

我有一个 javafx 应用程序,它应该在 Windows 平板电脑上以全屏模式运行。

我的问题是,当键盘出现时,它是 QWERTY,而我的平板电脑是 AZERTY。

所以问题是:有没有办法使用系统虚拟键盘或将javafx虚拟键盘切换到AZERTY?

4

2 回答 2

3

我在尝试完成同样的事情时发现你的问题。我花了一天时间试图让 javafx 显示一个 AZERTY 键盘,我找到了解决方案!

好吧,让我说清楚:javafx 根本没有办法拥有一个 azerty 键盘,所以你必须稍微修改一下。

下面的解决方案不是一个完美的解决方案,每次更新 javafx 时都必须重复它,但它可以让您在 querty 和 azerty 之外对键盘进行极端自定义。

解决方案1(脏但有效)

您需要在 JDK 附带的 javafx 文件中编辑一个文件

脚步 :

  1. 转到 JDK(在 Mac 中:/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home)

  2. 进入 jre/lib/ext 并将名为 jfxrt.jar 的 javafx jar 复制到桌面上的文件夹中。

  3. 如果您没有 EMACS,请安装它并使用此软件打开复制的 jar 文件

  4. 浏览文件列表搜索 com/sun/javafx/scene/control/skin/TextBoard.txt 该列表从 AZ 排序所以使用它(有超过 6000 个文件)。

  5. 打开它,你就在这里。将字符更改为任何让您开心的顺序。我加入了azerty命令。

  6. 保存并将 jfxrt.jar 复制回原来的位置。完毕。

注意:不要尝试解压 jar 并重新压缩它,因为 jdk 会保留文件的索引列表,所以它不会起作用。

结果:azerty javafx 虚拟键盘正在运行

解决方案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

于 2017-05-19T15:40:47.917 回答
0

布局的定义包含在 jfxrt.jar(Java 安装的一部分)中。它由 描述TextBoard.txt。可以使用 7zip 或类似程序浏览 jfxrt.jar。TextBoard.txtcom/sun/javafx/scene/control/skin/

这个文件被加载com/sun/javafx/scene/control/skin/FXVKSkin.java负责加载TextBoard.txt文件。浏览 javafx 源(通过 jdk 包含并包含在 中javafx-src.zip)以查看它是如何处理的。也许这会给你足够的信息来加载你自己的 TextBoard.txt 文件。

于 2015-09-01T14:59:27.757 回答