我想向JavaFX的虚拟键盘添加数字键盘。

我尝试了其他几种解决方案(包括使用GitHub上的键盘或尝试JavaFX的数字虚拟键盘),但这将是最简单,最实用的方法。

我找到了com.sun.scene.control.skin.FXVKSkin.class读取的文本文件(com.sun.scene.control.skin.TextBoard.txt),以创建普通键盘。我添加了数字键盘,效果很好。但是,我要执行此操作而不实际编辑JRE。

这是加载键盘的FXVKSkin.java的相关部分。

private List<List<Key>> loadBoard(String type) {
    List<List<Key>> tmpBoard = boardMap.get(type);
    if (tmpBoard != null) {
        return tmpBoard;
    }
     String boardFileName = type.substring(0,1).toUpperCase() + type.substring(1).toLowerCase() + "Board.txt";
    try {
        tmpBoard = new ArrayList<List<Key>>(5);
        List<Key> keys = new ArrayList<Key>(20);
         InputStream boardFile = FXVKSkin.class.getResourceAsStream(boardFileName);
        BufferedReader reader = new BufferedReader(new InputStreamReader(boardFile));


或者,当FXVKSkin.java说“ FXVKSkin.class.getResourceAsStream(“ TextBoard.txt”)时,我是否能够仅将TextBoard.txt保留在项目的类路径中,并以某种方式指向该副本,而不是JRE中的副本?

最佳答案

我找到了解决方案!

我将jre / lib / ext / jfxrt.jar(com.sun.scene.control.skin.TextBoard.txt所在的jar文件)复制到了项目的工作目录中。我删除了副本中除路径com / sun / javafx / scene / control / skin / TextBoard.txt之外的所有内容,并添加了“ -Xbootclasspath / a:jfxrt.jar”作为启动选项。我仍在使用Java 8,因此这可能不适用于更高版本,但对我来说有效。

07-24 21:15