A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//目标:在窗体中显示一个倒计时
import java.awt.Graphics;
import javax.swing.JFrame;
public class DaoJiShi {
        public static void main(String[] args) {
                new MyFrame("倒计时");
        }
}
class MyFrame extends JFrame implements Runnable {
        int time = 10;
        String s = "无限制";
        public MyFrame (String s) {
                super(s);
                this.setSize(200, 100);
                this.setLocation(300, 200);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setVisible(true);
                new Thread(this).start();
        }
        public void paint (Graphics g) {
                g.drawString(s, 50, 50);
        }
        public void run() {
                while (true) {
                        s = time + "s";
                        time--;
                        try {
                                Thread.sleep(1000);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                        this.repaint();
                        if (time == 0) {
                                System.exit(0);
                        }
                }
        }
}

2 个回复

倒序浏览
这个问题就是写在JFrame上的文字没有刷新,要改进的话,就必须每次把JFrame上的字符清除再写上去,或者s改变一次,就重新加载一次JFrame。但是我找了半天,也没找到清除JFrame上文字的方法,至于重新加载JFrame,则更不现实。于是,我就想,在JFrame上添加一个JLabel,线程里的循环就每次把JLabel上的文字重新设置,这样就实现了动态改变。下面是改的一点代码。
  1. public class MyFrame extends JFrame implements Runnable {
  2.     int time = 10;
  3.     String s = "无限制";
  4.     JLabel jl;
  5.     public MyFrame (String s) {
  6.             super(s);
  7.             this.setSize(200, 100);
  8.             this.setLocation(300, 200);
  9.             this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  10.             this.setVisible(true);
  11.             jl=new JLabel();
  12.             this.add(jl);
  13.             new Thread(this).start();
  14.     }
  15.     /*public void paint (Graphics g) {
  16.             g.drawString(s, 50, 50);
  17.     }*/
  18.     public void run() {
  19.             while (true) {
  20.                     s = time + "s";
  21.                     time--;
  22.                     try {
  23.                             Thread.sleep(1000);
  24.                     } catch (InterruptedException e) {
  25.                             e.printStackTrace();
  26.                     }
  27.                     //this.repaint();
  28.                     jl.setText(s);
  29.                     if (time == 0) {
  30.                             System.exit(0);
  31.                     }
  32.             }
  33.     }
  34. }
复制代码
回复 使用道具 举报
本帖最后由 徐小骥 于 2012-8-3 13:32 编辑

我的思路是在jframe上添加一个jlabel,将时间显示在jlabel上!
//import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class djs {
        public static void main(String[] args) {
                new MyFrame("倒计时");
        }
}
class MyFrame extends JFrame implements Runnable {
            JLabel jl=new JLabel();//创建一个jlabel对象
        int time = 10;
        String s = "无限制";
        public MyFrame (String s) {
                super(s);
                this.setSize(200, 100);
                this.setLocation(300, 200);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setVisible(true);
                this.add(jl);//将jl加载在MyFrame;
               
                new Thread(this).start();
        }
       // public void paint (Graphics g) {
             //   g.drawString(s, 50, 50);
       //}
        public void run() {
                while (true) {
                        s = time + "s";
                        time--;
                        try {
                                Thread.sleep(1000);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                        jl.setText(s);//给jl赋值
                       // this.repaint();
                        if (time == 0) {
                                System.exit(0);
                        }
                }
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马