如何在JLabel1里显示时间,并且1秒变一次时间?如何在JLabel2里显示日期?

解决方案 »

  1.   

    你可以开一个时间线程 每隔一秒钟调用一次获取系统时间 在线程中用Lable 的setText方法设置lable的文字
      

  2.   

    试试这个
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Calendar;import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.Timer;public class Test extends JFrame{ private static final long serialVersionUID = -1570645570118871214L; public Test()
    {
    initUI();
    } private void initUI()
    {
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    final JLabel label = new JLabel();
    getContentPane().add(label);
    Timer timer = new Timer(1000, new ActionListener()
    { @Override
    public void actionPerformed(ActionEvent e)
    {
    label.setText(Calendar.getInstance().getTime().toString());
    }
    });
    timer.setRepeats(true);
    timer.start();
    } public static void main(String[] args)
    {
    Test t = new Test();
    t.setSize(500, 300);
    t.setVisible(true);
    }
    }
      

  3.   


    package chuangsi_0510.thread.timer;import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;import javax.swing.JFrame;
    import javax.swing.JLabel;public class TestSwingLabelTime {
    public static void main(String[] args) {
    JFrame frame = new JFrame("时钟演示");
    JLabel jlabel = new JLabel();

    frame.add(jlabel);
    frame.setSize(300, 200);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    LabelTask labelTask = new LabelTask(jlabel);
    Timer timer = new Timer();
    timer.schedule(labelTask, 20, 1000);

    }
    }
    class LabelTask extends TimerTask{
    private JLabel jlabel;
    public LabelTask(JLabel jlabel){
    this.jlabel = jlabel;
    }

    @Override
    public void run() {
    Date date = new Date();
    jlabel.setText(date.toString());
    }

    }
      

  4.   

    请教下4楼的代码private static final long serialVersionUID = -1570645570118871214L;这句到底是做什么用的啊,以前也用过,不过好像不加这个不行,但是又不知道为什么要加这行,具体做什么用的呢?
      

  5.   

    用线程写的,比较简陋,呵呵import java.applet.*;
    import javax.swing.*;
    import java.util.*;
    import java.text.*;public  class ShowTime extends JFrame implements Runnable{

    JLabel jl = new JLabel();
    SimpleDateFormat  sdf = new SimpleDateFormat("hh:mm:ss");
    ShowTime(){
    setSize(150,100);
    //setLayout(null);
    setTitle("TIME");
    //jl.setBounds(25,50,20,50);
    add(jl);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    }
    public void run(){
    String str;
    while(true){
    try{
    str = sdf.format(new Date());
    jl.setText(str);
    Thread.currentThread().sleep(1000);
    }catch(InterruptedException ie){
    ie.printStackTrace();
    }
    }
    }
    public static void main(String[]args){
    ShowTime  st = new ShowTime();
    Thread  th = new Thread(st);
    th.start();
    }
    }
      

  6.   

    这样试试吧。写的不太好。看看那位兄弟能给改改。import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Calendar;import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.Timer;public class Test extends JFrame{ private static final long serialVersionUID = -1570645570118871214L; public Test()
    {
    initUI();
    } private void initUI()
    {
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    final JLabel labelDay = new JLabel();
    final JLabel labelTime = new JLabel();
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(labelDay, BorderLayout.NORTH);
    getContentPane().add(labelTime, BorderLayout.CENTER);
    Timer timer = new Timer(1000, new ActionListener()
    {
    @Override
    public void actionPerformed(ActionEvent e)
    {
    Calendar calendar = Calendar.getInstance();
    String year =String.valueOf(calendar.get(Calendar.YEAR));
    String month =String.valueOf(calendar.get(Calendar.MONTH) + 1);
    String day =String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
    String hour =String.valueOf(calendar.get(Calendar.HOUR));
    String minute =String.valueOf(calendar.get(Calendar.MINUTE));
    String second =String.valueOf(calendar.get(Calendar.SECOND)); String date = new StringBuilder().append(year).append("/")
    .append(month).append("/").append(day).toString();
    String time = new StringBuilder().append(hour).append(":")
    .append(minute).append(":").append(second).toString(); labelDay.setText(date);
    labelTime.setText(time); }
    });
    timer.setRepeats(true);
    timer.start();
    } public static void main(String[] args)
    {
    Test t = new Test();
    t.setSize(500, 300);
    t.setVisible(true);
    }
    }
      

  7.   

    这是我以前的一个程序中用到的,完成楼主说的功能。/*
     * TimeShow.java
     *
     * Created on 2007年11月21日, 下午12:53
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */package emailgiant.Tools;import javax.swing.*;
    import java.util.*;
    import java.util.regex.*;
    /**生成一个线程显示时间。
     *
     * @author KILLer
     */
    public class TimeShow extends Thread{
        private JLabel time,date;
        private boolean tag;//控制线程的开始,停止
        private Date nowTime;
        private static String now,dateNow;
        /**构造函数
         * @param t 显示时间的标签。
         * @param d 显示日期的标签。
         */
        public TimeShow(JLabel t,JLabel d) {
            time=t;
            date=d;
            tag=true;
        }
        /**停止线程。
         */
        public void Stop(){
            tag=false;
        }
        /**线程执行部分。
         */
        public void run(){
            while(tag){
                nowTime=new Date();
                now=nowTime.toString();
                dateNow=DateHandler.dateHandler(nowTime);
                now=slip(now);
                time.setText(now);
                if(!this.date.getText().equals(date))
                this.date.setText(dateNow);
                try{
                   sleep(1000);
                }
                catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
        
        /**得到当前时间。
         */
        public static String GetTime(){
            return dateNow+" "+now;
        }
        
        /**将日期转化格式为XXXX-XX-XX。
         * @param date 将被转化的日期。
         */
        public static String ConvertTime(Date date){
            String time=slip(date.toString());
            String datet=DateHandler.dateHandler(date);
            return datet+" "+time;
        }
        /**以空格为标记分隔字符串。
         */
        private static String slip(String s){
            Pattern p=Pattern.compile("[\\s]+");
            String[] date=p.split(s);
            return date[3];
        }
    }
    /*
     * DateHandler.java
     *
     * Created on 2007年11月21日, 下午8:58
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */package emailgiant.Tools;import java.util.*;
    import java.util.regex.*;
    /**生成格式为XXXX-XX-XX日期
     *
     * @author KILLer
     */
    public class DateHandler {
        
        /**构造函数
         * @param date 将被转化的日期。
         * @return 指定格式的日期。
         */
        public static String dateHandler(Date date){
            String tmp=date.toString();
            Pattern p=Pattern.compile("[\\s]+");
            String[] value=p.split(tmp);
            String dateNow=value[5]+"-"+value[1]+"-"+value[2];
            return dateNow;
        }
    }
    把显示时间,日期的标签传入TimeShow的构造函数,然后TimeShow.start()就可以了