标签刷新功能不起作用

时间:2014-02-06 08:08:23

标签: java acm-java-libraries

我正在尝试设置一个函数,该函数从用户获取输入并将其打印到标签上并按条目更新。通过删除旧标签然后添加具有更新值的标签来进行更新。文本将是中心对齐的。虽然我能够获得标签来打印“条目”的当前值,但它不会删除带有旧值的标签。我想知道如何纠正这个问题?

import acm.graphics.*;
import acm.program.*;

public class testCanvas extends ConsoleProgram {

    public void run()
    {
        GCanvas canvas = new GCanvas();
        add(canvas);
        String entry ="";
        while(true)
        {

            entry += readLine("Give me a word: ");
            if(entry=="") break;
            GLabel label = new GLabel(entry);
            label.setLocation(200-label.getWidth()/2, 
                    60+label.getHeight());

            label.setFont("Times New Roman-24");
            // remove old label and immediately update it with 
            // label with current value for "entry"
            canvas.remove(label);
            canvas.add(label);

        }
    }
}

2 个答案:

答案 0 :(得分:0)

您的无限循环可能会阻止标签更新。你需要像UI线程这样的东西,它会异步更新它。

答案 1 :(得分:0)

在这种情况下,问题与错误的逻辑相对应,因为您更改了标签变量指针上一个删除命令,程序只是没有从画布中删除任何内容,因为标签变量寻址的对象尚未添加到画布中。

在这种情况下,您应首先通过 new 命令删除标签对象表单画布上指针的重定向。您只需记住标签是指向对象的指针。

import acm.graphics.*;
import acm.program.*;

    public class testCanvas extends ConsoleProgram {

        public void run()
        {
            GCanvas canvas = new GCanvas();
            add(canvas);
            String entry ="";
            GLabel label = null;
            while(true) {

                entry += readLine("Give me a word: ");
                if(entry=="") break;

                if (label!=null) canvas.remove(label);  //removes the previous label object
                label = new GLabel(entry);  //redirect the pointer to the new object
                label.setLocation(200-label.getWidth()/2, 
                        60+label.getHeight());

                label.setFont("Times New Roman-24");
                canvas.add(label);  //adds the new label to the canvas

            }
        }
    }