以下代码是从Java程序中提取的。程序代码非常大,所以我只是发布了所需的部分。在代码中,if (i == 2)
做了什么?它检查了什么,它如何检查2?
panel.setLayout(new GridLayout(5, 4, 5, 5));
String[] buttons = {
"Cls", "Bck", "", "Close", "7", "8", "9", "/", "4",
"5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"
};
for (int i = 0; i < buttons.length; i++) {
if (i == 2)
panel.add(new JLabel(buttons[i]));
else
panel.add(new JButton(buttons[i]));
}
答案 0 :(得分:3)
它正在创建一个4列乘5行网格并将按钮放入除第三列(偏移2)之外的所有按钮。第三个是通过在其中放置标签而留空。
所以你得到的是以下计算器布局,第三个位置没有按钮:
+-------+-------+ +-------+
| Cls | Bck | | Close |
+-------+-------+-------+-------+
| 7 | 8 | 9 | / |
+-------+-------+-------+-------+
| 4 | 5 | 6 | * |
+-------+-------+-------+-------+
| 1 | 2 | 3 | - |
+-------+-------+-------+-------+
| 0 | . | = | + |
+-------+-------+-------+-------+
这只是一个简单的方法,可以将一个按钮列表放在一个短循环中,并带有一点点kludge,以确保布局没有任何无效的按钮。
对于它的价值,我认为以下情况会更好,这样你就不会依赖绝对位置:
panel.setLayout(new GridLayout(5, 4, 5, 5));
String[] buttons = {
"Cls" , "Bck" , null , "Close",
"7" , "8" , "9" , "/" ,
"4", , "5" , "6" , "*" ,
"1" , "2" , "3" , "-" ,
"0" , "." , "=" , "+"
};
for (int i = 0; i < buttons.length; i++) {
if (buttons[i] == null)
panel.add(new JLabel(""));
else
panel.add(new JButton(buttons[i]));
}
这只依赖于一条信息,即buttons
数组中的一条信息。当然,它假设你只想要空白标签,但在这种情况下,它没关系,因为这就是他们所用的全部。
答案 1 :(得分:1)
鉴于int i
,i == 2
评估为true
当且仅当i
恰好包含值2.否则为false
。
因此:
if (i == 2) {
// code executed if i has the value 2
} else {
// code executed if i does NOT have the value 2
}
请注意,数组是零索引的。所以鉴于此声明:
String[] buttons = {
"Cls", "Bck", "", "Close", "7", "8", "9", "/", "4",
"5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"
};
我们有:
buttons[0].equals("Cls")
buttons[1].equals("Bck")
buttons[2].isEmpty()
因此整个for
循环遍历String[] buttons
中的每个元素,并且对于除索引2之外的每个元素(这些元素恰好是非空字符串的元素),它添加了面板上带有该标签的JButton
。对于索引2处的元素(恰好是空字符串),它会添加JLabel
。
请注意,GridLayout
在constructor used下有5行4列,所以代码基本上会创建以下布局:
_______________________________
| | | | |
| Cls | Bck |<blank>| Close |
|_______|_______|_______|_______|
| | | | |
| 7 | 8 | 9 | / |
|_______|_______|_______|_______|
| | | | |
| 4 | 5 | 6 | * |
|_______|_______|_______|_______|
| | | | |
| 1 | 2 | 3 | - |
|_______|_______|_______|_______|
| | | | |
| 0 | . | = | + |
|_______|_______|_______|_______|
println
示例要了解for
循环逻辑本身,请考虑以下代码段:
String[] buttons = {
"Cls", "Bck", "", "Close",
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", ".", "=", "+"
};
for (int i = 0; i < buttons.length; i++) {
if (i == 2) {
System.out.println(buttons[i]);
} else {
System.out.println("[" + buttons[i] + "]");
}
}
以上打印(as seen on ideone.com):
[Cls]
[Bck]
[Close]
[7]
[8]
[9]
[/]
[4]
[5]
[6]
[*]
[1]
[2]
[3]
[-]
[0]
[.]
[=]
[+]
返回GridLayout
,在上面的代码段中打印字符串的顺序也是将组件添加到Panel
中的顺序,从左到右,从顶部开始到底的订单(即row-major订单)。
答案 2 :(得分:1)
鉴于这一行:
for (int i = 0; i < buttons.length; i++) {
for
语句在值i
处创建变量0
。然后,对于数组{
中的每个值(列表结构),它在}
和buttons
之间运行一次代码,每次增加变量i
。
第一次,行if (i == 2)
将失败,因为i
仍为0
,然后在else
语句后调用代码。这会添加一个包含文本Cls
的按钮。
第三次通过代码,变量i
将为2
(因为它从零开始),然后它将在if (i == 2)
之后运行 - 因为这就是它确实
然后它将添加一个空标签(数组buttons
中的第三个条目,数组从第一个位置的0
开始。)而不是按钮。
我建议您查看the Java tutorials以获取有关其语言和结构的更多信息。 :)
答案 3 :(得分:0)
String[] buttons
定义要在面板上布局的一组按钮上显示的文本(看起来像计算器程序)。请注意,第三个条目(索引2)是一个空字符串""
。您列出的代码会在该位置插入空标签而不是按钮。
答案 4 :(得分:0)
创建计算器键盘。 将第一行中的第三列保留为带有空文本的JLable。
哇有人已经把它看起来如何。这应该回答所有问题。