我基本上是从图书馆借书的,然后开始学习Java。我正在尝试为我的高尔夫联赛编写一个小分数计算器,而该网站已无济于事!因此,感谢您的光临!
现在问题来了:
我有9个标签,是使用NetBeans GUI创建的,名称类似于jLabel_Hole1,jLabel_Hole2,...
如果用户选择单选选项来播放前九个标签,则这些标签的编号为1-9,如果将其更改为“ Back Nine”,则应显示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不可变的信息,也许这只是一个限制,但我认为必须有办法,而且我无法想象。
谢谢。
最佳答案
基本上,而不是为每个孔创建一个单独的标签,您应该创建一个标签数组,其中数组中的每个元素代表一个单独的孔。
所以代替...
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(...);
}
更好的解决方案是向开发人员隐藏标签,并只提供设置器即可。
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教程以了解更多详细信息...