Swing,更新for中的textfield值

时间:2013-05-06 17:32:49

标签: java swing event-dispatch-thread thread-sleep

我正在尝试在for中更新我的Java Swing表单。我尝试了很多方法,但它没有用。这是我上次尝试过的:

for(int i=0; i<10; i++) {
    jTextField1.setText("" + i);

    try {
        Thread.sleep(500);
    }
    catch (InterruptedException ex) {
        Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
    }
}

2 个答案:

答案 0 :(得分:1)

你不能使你的jTextField1变量'final',但是你可以使用一个声明为final的局部变量并设置为你的jTextField1变量,如下所示...我在编码中多次使用这种方法,它可以工作..

final jTextField local_var = jTextField1;

SwingUtilities.invokeLater(new Runnable() {

public void run() {

for (int i=0; i<10; i++) { local_var.setText("" + i); }});

答案 1 :(得分:0)

我想您正在尝试从外部线程更新组件。一般来说,Swing不是线程安全的,有关更多详细信息,请查看this。关于您的代码,请尝试遵循以下方法:

for(int i=0; i<10; i++) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            jTextField1.setText("" + i);
        }
    });
}

变量jTextField1必须声明为final