我基本上从图书馆查了一本书,开始学习Java。我正在尝试为我的高尔夫联赛编写一个小分数计算器,这个网站一直是一个帮助!非常感谢,即使在这里!
现在问题:
我有一个使用NetBeans GUI创建的9个标签,其名称类似于jLabel_Hole1,jLabel_Hole2,......
如果用户选择无线电选项播放前九个标签,则这些标签的编号为1 - 9,如果他们将其更改为“后九”,则应显示10 - 18.我可以手动将每个标签设置为新标签选择改变的价值,但我想知道是否有一个更优雅的方式,如果是这样,如果你们中的一个人能够解释它是如何工作的。
以下是我想尝试和截断的代码:
TGL.jLbl_Hole1.setText("10");
TGL.jLbl_Hole2.setText("11");
TGL.jLbl_Hole3.setText("12");
TGL.jLbl_Hole4.setText("13");
TGL.jLbl_Hole5.setText("14");
TGL.jLbl_Hole6.setText("15");
TGL.jLbl_Hole7.setText("16");
TGL.jLbl_Hole8.setText("17");
TGL.jLbl_Hole9.setText("18");
我已经读过一些关于String不可变的事情,也许这只是一个限制,但我认为必须有办法,我无法想象它。
感谢。
答案 0 :(得分:2)
基本上,不是为每个孔创建单独的标签,而是应该创建一个标签数组,其中数组中的每个元素代表一个单独的孔。
所以不是......
TGL.jLbl_Hole1.setText("10");
TGL.jLbl_Hole2.setText("11");
TGL.jLbl_Hole3.setText("12");
TGL.jLbl_Hole4.setText("13");
TGL.jLbl_Hole5.setText("14");
TGL.jLbl_Hole6.setText("15");
TGL.jLbl_Hole7.setText("16");
TGL.jLbl_Hole8.setText("17");
TGL.jLbl_Hole9.setText("18");
你会......
for (JLabel label : TGL.holeLables) {
lable.setText(...);
}
更好的解决方案是隐藏开发人员的标签,只需提供一个setter ......
TGL.setHoleText(hole, text); // hole is int and text is String
在TGL
课程的内部,你有两个选择......
如果你在Netbeans中使用了表单编辑器,那么你必须将Netbeans创建的组件放入你自己的数组中......
private JLabel[] holes;
//...//
// Some where after initComponents is called...
holes = new JLabel[9];
holes[0] = jLbl_Hole1;
// There other 8 holes...
然后你只需提供一个可以更新或返回值的setter和getter方法......
public void setHole(int hole, String text) {
if (hole >= 0 && hole < holes.length) {
holes[hole].setText(text);
}
}
public String getHole() {
String text = null;
if (hole >= 0 && hole < holes.length) {
text = holes[hole].getText();
}
return text;
}
仔细查看Arrays教程以获取更多详细信息......
答案 1 :(得分:1)
我从来没有找到过一个Java GUI生成器来提供任何好的代码。我可能错了 - 可能有一个好的,但我总是喜欢自己定位和命名。所以,
/**
* The JLabels for the holes on the golf course.
* <p>
* holeLabels[0][i] are for the outward holes, 1-9.
* holeLabels[1][i] are for the inward holes, 10-18.
*/
private JLabel[][] holeLabels;
/**
* The starts of the outward and inward ranges of holes.
*/
private static final int[] holeStart = {1, 10};
// Later
holeLabels = new JLabel[2][9];
for(final int i = 0; i < holeLabels.length; i++) {
for (final int j = 0; j < holeLabels[i].length; j++) {
holeLabel[i][j] = new JLabel();
holeLabel[i][j].setText(Integer.toString(holeStart[i] + j));
}
}
有趣的是,holeLabels.length
是2
。 holeLabels
是包含9 int
个的2个数组的数组。 i
从0
转到1
,j
从0
转到8
,因此文本计算有效。我这样做的原因是你可以轻松地将标签放在适当的GridLayout
之后。