1

我基本上从图书馆借了一本书并开始学习Java。我正在尝试为我的高尔夫联赛编写一个小分数计算器,这个网站对我很有帮助!所以感谢你甚至在这里!

现在的问题:

我有 9 个标签,使用 NetBeans GUI 创建,名称如 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 是不可变的东西,也许这只是一个限制,但我认为必须有办法,我无法想象。

谢谢。

4

2 回答 2

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(...);
}

更好的解决方案是对开发人员隐藏标签并简单地提供一个设置器......

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;
}

仔细查看数组教程以获取更多详细信息...

于 2013-06-08T01:32:08.227 回答
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.length2。 是 2 个 9 s holeLabels的数组。从到,从到,所以文本计算有效。我这样做的原因是您以后可以轻松地将标签放置在适当的位置。inti01j08GridLayout

于 2013-06-08T01:57:54.193 回答