小妹请教高手:自己编了一个倒计时器,但只能运行一次,为什么,如何修改?
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Countdown implements ActionListener,SwingConstants{
private int time;
Timer t = new Timer(1000,this);
JTextField jtfc = new JTextField(10);
JTextField[] jtf = new JTextField[3];
{for(int i=0;i<jtf.length;i++){
jtf[i] = new JTextField(3);
}}
public void actionPerformed(ActionEvent ae){
String comm = ae.getActionCommand();
int h = Integer.parseInt(jtf[0].getText());
int f = Integer.parseInt(jtf[1].getText());
int m = Integer.parseInt(jtf[2].getText());
time = h*3600+f*60+m;
if("start".equals(comm)){
t.start();
}else if("stop".equals(comm)){
t.stop();
}else{
time--;
}
jtfc.setText(time/3600+"小时"+time%3600/60+"分钟"+time%60+"秒");
if(time==0){
System.exit(1);
}
}
public Countdown(){
JFrame jf = new JFrame("DouSunny倒计时器");
jf.setLayout(new GridLayout(3,1));
JPanel jp1 = new JPanel(new FlowLayout());
String[] sl = {"设定时间:","小时","分","秒","距结束还有:"};
JLabel[] lb = new JLabel[sl.length];
for(int i=0;i<sl.length;i++){
lb[i] = new JLabel(sl[i]);
}
for(int i=0;i<3;i++){
jp1.add(lb[i]);
jp1.add(jtf[i]);
}
jp1.add(lb[3]);
jf.add(jp1);
JLabel jl = new JLabel();
//----------------------------
JButton jb = new JButton("start");
jb.addActionListener(this);
JPanel jp2 = new JPanel();
jp2.add(jb);
jf.add(jp2);
//-----------------------------
JPanel jp3 = new JPanel();
jp3.add(lb[4]);
jp3.add(jtfc);
jf.add(jp3);
jf.setSize(300,200);//大小
jf.setLocation(300,200);//出现位置
jf.setVisible(true);//可见
jf.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Countdown();
}}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Countdown implements ActionListener,SwingConstants{
private int time;
Timer t = new Timer(1000,this);
JTextField jtfc = new JTextField(10);
JTextField[] jtf = new JTextField[3];
{for(int i=0;i<jtf.length;i++){
jtf[i] = new JTextField(3);
}}
public void actionPerformed(ActionEvent ae){
String comm = ae.getActionCommand();
int h = Integer.parseInt(jtf[0].getText());
int f = Integer.parseInt(jtf[1].getText());
int m = Integer.parseInt(jtf[2].getText());
time = h*3600+f*60+m;
if("start".equals(comm)){
t.start();
}else if("stop".equals(comm)){
t.stop();
}else{
time--;
}
jtfc.setText(time/3600+"小时"+time%3600/60+"分钟"+time%60+"秒");
if(time==0){
System.exit(1);
}
}
public Countdown(){
JFrame jf = new JFrame("DouSunny倒计时器");
jf.setLayout(new GridLayout(3,1));
JPanel jp1 = new JPanel(new FlowLayout());
String[] sl = {"设定时间:","小时","分","秒","距结束还有:"};
JLabel[] lb = new JLabel[sl.length];
for(int i=0;i<sl.length;i++){
lb[i] = new JLabel(sl[i]);
}
for(int i=0;i<3;i++){
jp1.add(lb[i]);
jp1.add(jtf[i]);
}
jp1.add(lb[3]);
jf.add(jp1);
JLabel jl = new JLabel();
//----------------------------
JButton jb = new JButton("start");
jb.addActionListener(this);
JPanel jp2 = new JPanel();
jp2.add(jb);
jf.add(jp2);
//-----------------------------
JPanel jp3 = new JPanel();
jp3.add(lb[4]);
jp3.add(jtfc);
jf.add(jp3);
jf.setSize(300,200);//大小
jf.setLocation(300,200);//出现位置
jf.setVisible(true);//可见
jf.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Countdown();
}}
每次点击,就重置时间,然后秒数减1,然后退出了还有你的Timer用错了。你看看我的这个代码吧!import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;public class Countdown extends TimerTask implements ActionListener, SwingConstants {
private int time; Timer t = new Timer(); JTextField jtfc = new JTextField(10); JTextField[] jtf = new JTextField[3];
{
for (int i = 0; i < jtf.length; i++) {
jtf[i] = new JTextField(3);
}
} public void actionPerformed(ActionEvent ae) {
int h = Integer.parseInt(jtf[0].getText());
int f = Integer.parseInt(jtf[1].getText());
int m = Integer.parseInt(jtf[2].getText());
time = h * 3600 + f * 60 + m;
this.cancel();
t.schedule(this, 0, 1000);
} @Override
public void run() {
jtfc.setText(time / 3600 + "小时" + time % 3600 / 60 + "分钟" + time % 60 + "秒");
time--;
if (time <= 0) {
this.cancel();
}
} public Countdown() {
JFrame jf = new JFrame("DouSunny倒计时器");
jf.setLayout(new GridLayout(3, 1));
JPanel jp1 = new JPanel(new FlowLayout());
String[] sl = { "设定时间:", "小时", "分", "秒", "距结束还有:" };
JLabel[] lb = new JLabel[sl.length];
for (int i = 0; i < sl.length; i++) {
lb[i] = new JLabel(sl[i]);
}
for (int i = 0; i < 3; i++) {
jp1.add(lb[i]);
jp1.add(jtf[i]);
}
jp1.add(lb[3]);
jf.add(jp1);
JLabel jl = new JLabel();
// ----------------------------
JButton jb = new JButton("start");
jb.addActionListener(this);
JPanel jp2 = new JPanel();
jp2.add(jb);
jf.add(jp2);
// -----------------------------
JPanel jp3 = new JPanel();
jp3.add(lb[4]);
jp3.add(jtfc);
jf.add(jp3);
jf.setSize(300, 200);// 大小
jf.setLocation(300, 200);// 出现位置
jf.setVisible(true);// 可见
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
new Countdown();
}
}
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;public class Countdown extends TimerTask implements ActionListener,
SwingConstants {
private int time; Timer t = new Timer(); JTextField jtfc = new JTextField(10); JTextField[] jtf = new JTextField[3];
{
for (int i = 0; i < jtf.length; i++) {
jtf[i] = new JTextField(3);
}
} public void actionPerformed(ActionEvent ae) {
int h = Integer.parseInt(jtf[0].getText());
int f = Integer.parseInt(jtf[1].getText());
int m = Integer.parseInt(jtf[2].getText());
time = h * 3600 + f * 60 + m;
try {
t.schedule(this, 0, 1000);
}
catch(Exception e){
} } @Override
public void run() {
jtfc.setText(time / 3600 + "小时" + time % 3600 / 60 + "分钟" + time % 60
+ "秒");
time--;
if (time <= 0) {
this.cancel();
}
} public Countdown() {
JFrame jf = new JFrame("DouSunny倒计时器");
jf.setLayout(new GridLayout(3, 1));
JPanel jp1 = new JPanel(new FlowLayout());
String[] sl = { "设定时间:", "小时", "分", "秒", "距结束还有:" };
JLabel[] lb = new JLabel[sl.length];
for (int i = 0; i < sl.length; i++) {
lb[i] = new JLabel(sl[i]);
}
for (int i = 0; i < 3; i++) {
jp1.add(lb[i]);
jp1.add(jtf[i]);
}
jp1.add(lb[3]);
jf.add(jp1);
// ----------------------------
JButton jb = new JButton("start");
jb.addActionListener(this);
JPanel jp2 = new JPanel();
jp2.add(jb);
jf.add(jp2);
// -----------------------------
JPanel jp3 = new JPanel();
jp3.add(lb[4]);
jp3.add(jtfc);
jf.add(jp3);
jf.setSize(300, 200);// 大小
jf.setLocation(300, 200);// 出现位置
jf.setVisible(true);// 可见
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
new Countdown();
}
}[/]
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.util.Timer;
import java.util.TimerTask;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Countdown extends JFrame {
private static final long serialVersionUID=8999967890123456789l;
public static void main(String[] args) {
new Countdown("DouSunny倒计时器");
} private boolean isStart; private JButton jb = new JButton("Start"); JTextField[] jtf = new JTextField[3]; JTextField jtfc = new JTextField(10); Timer t = new Timer(); private TimerTask task;
private int time; {
for (int i = 0; i < jtf.length; i++) {
jtf[i] = new JTextField(3);
jtf[i].setText("0");
jtf[i].addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) {
if (e.getSource() instanceof JTextField) {
JTextField text = (JTextField) e.getSource();
String textValue = text.getText();
if (textValue != null && !textValue.equals("")) { try {
int intValue = Integer.parseInt(textValue);
text
.setText((intValue < 0 ? 0 : intValue)
+ "");
} catch (Exception ex) {
text.setText("0");
}
} else {
text.setText("0");
}
}
}
});
}
} public Countdown() {
this("");
} public Countdown(String title) {
super(title);
try {
init();
moreInit();
} catch (Exception e) {
e.printStackTrace();
}
} public void actionPerformeds() {
if (isStart) {
task = new TimerTask() { @Override
public void run() {
// TODO Auto-generated method stub
runs();
} };
if (time <= 0) {
int h = Integer.parseInt(jtf[0].getText());
int f = Integer.parseInt(jtf[1].getText());
int m = Integer.parseInt(jtf[2].getText());
time = h * 3600 + f * 60 + m;
} // this.cancel();
t.schedule(task, 0, 1000);
} else {
task.cancel();
} } private void init() throws Exception { setLayout(new GridLayout(3, 1));
JPanel jp1 = new JPanel(new FlowLayout());
String[] sl = { "设定时间:", "小时", "分", "秒", "距结束还有:" };
JLabel[] lb = new JLabel[sl.length];
for (int i = 0; i < sl.length; i++) {
lb[i] = new JLabel(sl[i]);
}
for (int i = 0; i < 3; i++) {
jp1.add(lb[i]);
jp1.add(jtf[i]);
}
jp1.add(lb[3]);
add(jp1);
// JLabel jl = new JLabel();
// ---------------------------- JPanel jp2 = new JPanel();
jp2.add(jb);
add(jp2);
// -----------------------------
JPanel jp3 = new JPanel();
jp3.add(lb[4]);
jp3.add(jtfc);
add(jp3);
setSize(300, 200);// 大小
setLocation(300, 200);// 出现位置
setVisible(true);// 可见
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} private void moreInit() {
jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
isStart = !isStart;
jb.setText(isStart ? "Stop" : "Start");
actionPerformeds();
} });
} public void runs() { if (time > 0) {
time--;
} else {
task.cancel();
isStart = false;
jb.setText("Start");
}
jtfc.setText(time / 3600 + "小时" + time % 3600 / 60 + "分钟" + time % 60
+ "秒");
System.out.println(time / 3600 + "小时" + time % 3600 / 60 + "分钟" + time
% 60 + "秒"); }
}
测试一下如何插入代码o(^_^)o