Keyboard Layout library to find Neighboring Keys given an input key (java preferable) [closed]

﹥>﹥吖頭↗ 提交于 2019-12-05 07:25:03

I agree with BlueNovember but in case you want a more "mathematical" solution check this. First you create a grid of characters and then you return all of them that has a distance smaller than 2 from the key passed... Kinda useless but it's a nice exercise :)

public class Test {

    static String chars = "qwertyuiopasdfghjkl;zxcvbnm,.";

    public static void main(String[] args) {
        System.out.println(getNeighboringKeys('f'));
        System.out.println(getNeighboringKeys('u'));
        System.out.println(getNeighboringKeys('m'));
        System.out.println(getNeighboringKeys('q'));
    }

    public static String getNeighboringKeys(char key) {
        StringBuffer result = new StringBuffer();
        for (char c : chars.toCharArray()) {
            if (c!=key && distance(c,key)<2) {
                result.append(c);
            }
        }
        return result.toString();
    }

    public static double distance(char c1, char c2) {
        return Math.sqrt(Math.pow(colOf(c2)-colOf(c1),2)+Math.pow(rowOf(c2)-rowOf(c1),2));
    }

    public static int rowOf(char c) {
        return chars.indexOf(c) / 10;
    }

    public static int colOf(char c) {
        return chars.indexOf(c) % 10;
    }
}

I gave up on this and just let the user choose what keys are suitably adjacent. In this project an enum Key relates each command to a keyCode, and this dialog lets the user change the mapping. The result is saved in Preferences.

I'd be surprised if there is a solution better than Note 2.

What would the library be doing underneath, if not this? Keys don't have any relationship to each other you can build from.

Be careful when you do this. For example, next to D are ZERSFXCV, not WERSFXCV if you're in France. And if you use Dvorak, it's YFGIHXBM. If you're in Turkey, it might be 567ORUTK.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!