Java通过for循环更新jLabel.setText

时间:2013-06-08 01:19:57

标签: java swing loops jlabel settext

我基本上从图书馆查了一本书,开始学习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不可变的事情,也许这只是一个限制,但我认为必须有办法,我无法想象它。

感谢。

2 个答案:

答案 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.length2holeLabels是包含9 int个的2个数组的数组。 i0转到1j0转到8,因此文本计算有效。我这样做的原因是你可以轻松地将标签放在适当的GridLayout之后。