字符串数组未绘制第一行词搜索

String array is not drawing the first row Word Search

我正在为作业进行单词搜索,但无法绘制第一行,我已经创建了 2 个 for 循环并将它们初始化为 0。

我尝试添加一个额外的字母行,但这不是正确的方法。

拜托,我不知道这是怎么回事。


    private int casillas;
    private Font font = new Font("Arial", Font.BOLD, 32);
    private String[][] letters = 
    {
            {"Z", "P", "D", "S", "Y", "I", "I", "H", "L", "H", "C", "S", "M", "O", "J", "T", "M", "I", "L", "E"},
            {"L", "A", "S", "T", "I", "N", "D", "E", "X", "T", "T", "O", "L", "A", "K", " C", "F", "E", "O", "N"},
            {"B", "E", "V", "H", "D", "Y", "G", "P", "A", "R", "D", "I", "N", "A", "T", "E", "S", "Z", "R", "D"},
            {"P", "P", "J", "E", "W", "G", "F", "R", "Y", "I", "E", "G", "W", "T", "U", "C", "L", "H", "U", "S"},
            {"J", "Y", "X", "E", "L", "A", "A", "M", "C", "M", "G", "N", "Z", "S", "A", "Q", "H", "P", "C", "W"},
            {"O", "O", "K", "O", "V", "H", "R", "K", "T", "V", "H", "I", "A", "A", "T", "I", "E", "Z", "C", "I"},
            {"F", "B", "Q", "D", "C", "H", "U", "Q", "E", "E", "C", "R", "P", "T", "D", "R", "N", "F", "M", "T"},
            {"S", "S", "K", "M", "G", "T", "X", "Z", "V", "K", "Z", "T", "H", "K", "L", "U", "A", "S", "G", "H"},
            {"M", "I", "B", "A", "W", "G", "L", "D", "R", "F", "Q", "S", "C", "O", "P", "M", "R", "T", "Q", "J"},
            {"V", "Y", "Y", "D", "O", "N", "Z", "U", "O", "G", "M", "B", "Q", "R", "G", "U", "Z", "T", "S", "S"},
            {"E", "C", "A", "L", "P", "E", "R", "T", "N", "S", "L", "U", "L", "D", "Q", "J", "Q", "V", "Y", "M"},
            {"O", "Q", "E", "J", "J", "L", "E", "W", "T", "C", "E", "S", "A", "S", "U", "I", "V", "R", "D", "C"},
            {"J", "W", "M", "K", "P", "R", "V", "Q", "Z", "H", "A", "R", "O", "W", "C", "O", "N", "C", "A", "T"},
            {"Q", "C", "Q", "S", "A", "A", "I", "E", "U", "Z", "D", "S", "G", "O", "U", "S", "N", "Z", "Z", "D"},
            {"Q", "U", "H", "P", "F", "R", "K", "W", "O", "L", "R", "I", "P", "S", "B", "S", "Y", "I", "Q", "E"},
            {"J", "S", "M", "O", "K", "Y", "E", "S", "A", "C", "R", "E", "W", "O", "L", "O", "T", "S", "X", "O"},
            {"C", "O", "O", "N", "L", "N", "F", "F", "Y", "T", "S", "G", "M", "K", "C", "B", "C", "L", "L", "E"},
            {"C", "P", "Q", "Y", "L", "T", "R", "Q", "K", "D", "Y", "Y", "E", "W", "B", "Z", "E", "V", "J", "N"},
            {"M", "E", "S", "T", "H", "R", "R", "V", "N", "W", "S", "B", "V", "B", "Y", "D", "V", "W", "S", "O"},
            {"K", "P", "Z", "N", "S", "M", "I", "V", "V", "L", "W", "F", "B", "U", "T", "V", "M", "T", "M", "C"}};

    public Cuadricula(int casillas) {
        this.casillas = casillas;
    }

    public void paint(Graphics2D g2d) {
        g2d.setFont(font);
        g2d.setColor(Color.WHITE);
        for (int i = 0; i < casillas; i += 32) {
            for (int j = 0; j < casillas; j += 32) {
                g2d.drawRect(i, j, 32, 32);
            }
        }


//Draw the letters in the grid
        ***for (int i = 0; i < letters.length; i ++) {
            for (int j = 0; j < letters.length; j ++) {
                g2d.drawString(letters[j][i], 32 * i, 32 * j);
            }
        }***

    }
}```

第一行被截断,因为原点 (0,0) 是字符的 baseline

这通过平移原点以补偿字符高度来解决(一种方式)。

这演示了 - 两个字符串 - 第一个在 (0,0) 处不使用未显示的翻译,第二个是 (0,0),遵循所用字体 "ascent" 的翻译:

g.setFont(new Font("TimesRoman", Font.PLAIN, 32)); 
g.drawString("Hello",0,0);
FontMetrics fm = g.getFontMetrics();
g.translate(0, fm.getAscent());
g.drawString("There",0,0);

在您的代码中,您需要在循环之前执行此操作。

这进一步证明了对 y 使用增加的平移偏移量:

String[] msgs = { "A", "B","C","D","E","F","G","H" };
int cnt = 0;
for (String s : msgs) {
    g.translate(0, (cnt * 2));
    cnt++;
    // moving x here for demo purposes - y is always 0 but translate moves it down
    g.drawString(s,(20*cnt),0);
}