循环打印字符串中的意外行为

时间:2010-03-11 03:26:42

标签: java

我不明白为什么会这样:

我有一个传递给标签对象的整数:

int NTURNS = 3;     
for (int i = NTURNS; i > 0; i--){
printTurns(i);  
buildBall(); 
}

和printTurns是这样的:

private void printTurns(int i){

 GLabel turns = new GLabel("" + i);
     remove(turns);     
 add(turns, (WIDTH - PADDLE_WIDTH), (BRICK_Y_OFFSET / 2));          
}

这将打印顶部游戏中剩余的回合次数。我有remove(turns);那里删除文本,所以下一个文本不会与旧文本重叠,但由于某种原因这不起作用。

这些数字堆叠在彼此之上。那是为什么?

3 个答案:

答案 0 :(得分:3)

你有一点GLabel问题。您将通过循环为每次迭代创建一个新的GLabel

您应该创建一个GLabel,将其添加到表单中,然后调用GLabel.setLabel()来更改循环的每次迭代的文本。这应该可以为你节省一些麻烦。

应用程序表单初始化的某处(可能是构造函数?):

public class MyForm : GCanvas
{
    private GLabel _turns = new GLabel();

    public MyForm()
    {
        add(_turns);
    }

    private void printTurns(int i)
    {
        _turns.setLabel("" + i);
        _turns.setLocation(WIDTH - PADDLE_WIDTH), (BRICK_Y_OFFSET / 2));
    }
}

答案 1 :(得分:2)

remove 字符串 - 尚不存在 - !即,你第二次remove“2” - 但没有这样的字符串(第一次你有add ed“3”,“2”!),所以没有效果。你需要记住你添加的前一个字符串,如果有的话,例如在私有成员变量中,在添加新字符串之前删除 一个字符串!

答案 2 :(得分:0)

我很难绕过Justin Niessner的答案,因为我对构造者来说还是新手......但它确实引导我找到一种适合我的方法。我正在回答,但我会将答案标记为正确:

private void setupGame(){

    GLabel turns = new GLabel("");   
    add(turns, (WIDTH - PADDLE_WIDTH), (BRICK_Y_OFFSET / 2));
    for (int i = NTURNS; i > 0; i--){
    turns.setLabel("" + i); 

    }
}