繁体   English   中英

Java通过for循环更新jLabel.setText

[英]Java update jLabel.setText via for loop

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

谢谢。

基本上,不是为每个孔创建单独的标签,您应该创建一个标签数组,其中数组中的每个元素代表一个单独的孔。

而不是......

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教程了解更多详情......

我从来没有找到一个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.length2 holeLabels是一个包含2个9个int数组的数组。 i01j08 ,所以文本计算工作。 我这样做的原因是你可以在以后轻松地将标签放在适当的GridLayout

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM