字符串数组未绘制第一行词搜索
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);
}
和
我正在为作业进行单词搜索,但无法绘制第一行,我已经创建了 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);
}
和