0

所以我试图挑战自己并创建一个简单的文字处理器应用程序。我目前正在设置键盘并且在按键方面遇到了一些问题。我有一个包含每个字母的字符串数组,并希望将它们放在按钮上。

我现在有这个:

    String FirstRow [] = {"q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m"};

    for(int i = 0; i < 40; i++)
    {
        if(i < 10)
        {
            JButton btn = new JButton();
            Nums.add(btn);
            btn.setText("" + Num);
            Num++;
        }
        else
        {       
            JButton btn1 = new JButton ();
            Nums.add(btn1);
            btn1.setText("" + FirstRow[n]);
            n++;
        }
    }

如果没有 if 语句的 else 部分,它可以很好地将数字放入第一行。但是,当我尝试放置字母时,我得到了一个超出范围的异常,我不知道如何解决这个问题。

4

3 回答 3

2

越界异常意味着您尝试访问的索引大于数组可以容纳的索引。尝试使用 foreach 代替:Java 'for each' 循环如何工作?

或者试试for(int i = 0; i < your_array.length; i++)

于 2013-06-11T13:28:43.850 回答
2

Yor 数组仅包含 26 个元素,但您的循环最多为 39。因此,当您的 for 循环达到 26 的计数(数组索引为零)时,您将获得 ArrayIndexOutOfBoundsException。

于 2013-06-11T13:27:34.317 回答
2

你应该让你的虚拟键盘成为一个二维数组:

String[][] keyCaps = {{"`", "1", ..., "0", "-", "="},
                      {"q", "w", ..., "p", "[", "]", "\\"},
                      ...,
                      {"z", "x", ..., "m", ",", ".", "/"}};

接着,

for (String[] row: keyCaps) {
    for (String key: row) {
        // create button.
        // Add button to layout.
    }
    // Go to next row on screen.
}

当然,您可以根据语言环境选择不同的数组。如果语言环境是法语,您可能需要法语 AZERTY (?) 键盘。AZERTY 是否正确?

于 2013-06-11T14:51:25.463 回答