Java 在计时器后刷新jTextField
我正在做一个Java主题的作业。我正在使用NetBeanIDE。我的作业要求我做一个文字游戏。我正在设计的游戏包含一个延迟为1000毫秒的计时器。计时器将一个变量从30递减到0。计时器本身正在工作。它位于GUI类的主功能中。我所面临的问题是,我不知道如何在每次变量递减时更新jTextfieldJava 在计时器后刷新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
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) 一行空白就足够了。
{
之后或}
之前的空行通常也是多余的。