Java 在计时器后刷新jTextField

Java 在计时器后刷新jTextField,java,swing,jtextfield,javax.swing.timer,Java,Swing,Jtextfield,Javax.swing.timer,我正在做一个Java主题的作业。我正在使用NetBeanIDE。我的作业要求我做一个文字游戏。我正在设计的游戏包含一个延迟为1000毫秒的计时器。计时器将一个变量从30递减到0。计时器本身正在工作。它位于GUI类的主功能中。我所面临的问题是,我不知道如何在每次变量递减时更新jTextfield public static void main(String args[]) { Time counter=new Time(); ActionListener actListner = new

我正在做一个Java主题的作业。我正在使用NetBeanIDE。我的作业要求我做一个文字游戏。我正在设计的游戏包含一个延迟为1000毫秒的计时器。计时器将一个变量从30递减到0。计时器本身正在工作。它位于GUI类的主功能中。我所面临的问题是,我不知道如何在每次变量递减时更新jTextfield

public static void main(String args[]) {

    Time counter=new Time();
ActionListener actListner = new ActionListener() {
            public void actionPerformed(ActionEvent event) {

            counter.decTime();
             jTime.setText("Time left: " + counter.getTime());


}



 };
          Timer timer = new Timer(1000, actListner);
            timer.start();
    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new StartGUI().setVisible(true);


        }
    });
}
我不知道如何正确地实施这一点

jTime.setText("Time left: " + counter.getTime());

不确定您做错了什么(这就是为什么您应该始终提供一个。当我使代码可运行时,它工作正常。这就是为什么我们需要能够运行您的代码以查看您的错误所在

以下是可运行版本:

import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.Timer;

public class StartGUI extends JFrame {

    static JTextField jTime = new JTextField(10);

    public StartGUI() {
        jTime.setEditable(false);
        add(jTime);
        setLayout(new GridBagLayout());
        setSize(200, 200);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    static class Time {
        int time = 1000;
        void decTime() {
            time--;
        }
        int getTime() {
            return time;
        }
    }

    public static void main(String args[]) {
        Time counter = new Time();
        ActionListener actListner = new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                counter.decTime();
                jTime.setText("Time left: " + counter.getTime());
            }
        };
        Timer timer = new Timer(1000, actListner);
        timer.start();
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new StartGUI().setVisible(true);
            }
        });
    }
}
下面是一些经过更好实践重构的代码

import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.Timer;

public class StartGUI extends JFrame {

    private JTextField jTime = new JTextField(10);
    private Timer timer = createTimer(1000);

    public StartGUI() {
        jTime.setEditable(false);

        add(jTime);
        setLayout(new GridBagLayout());
        pack();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    private Timer createTimer(int delay) {
        Timer timer = new Timer(delay, new ActionListener(){
            Time counter = new Time(30);
            public void actionPerformed(ActionEvent e) {
                if (counter.getTime() == 0) {
                    ((Timer)e.getSource()).stop();
                    jTime.setText("Times up!");
                } else {
                    jTime.setText("Time left: " + counter.getTime());
                    counter.decTime();
                }
            }
        });
        timer.setInitialDelay(0);
        return timer;
    }

    private Timer getTimer() {
        return timer;
    }

    static class Time {
        int time = 1000;
        public Time(int time) {
            this.time = time;
        }
        void decTime() {
            time--;
        }
        int getTime() {
            return time;
        }
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                StartGUI start = new StartGUI();
                start.setVisible(true);
                start.getTimer().start();
            }
        });
    }
}

谢谢你花时间来帮助我。我的程序到目前为止由5个类组成。这就是为什么我不能提供一个可执行的示例。我将在几分钟内返回完整的源代码。提前感谢!:)1)使用逻辑一致的代码格式样式!代码缩进旨在帮助人们遵循程序流程。2) 一行空白就足够了。
{
之后或
}
之前的空行通常也是多余的。