日期:2014-05-20  浏览次数:20764 次

Swing控件上不显示刷新时间 已经使用了Thread...很困扰...
附代码

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TestTime {

JLabel jLabel = new JLabel("北京时间");

Calendar cl3 = Calendar.getInstance();

public static void main(String[] args) {
TestTime tt = new TestTime();
tt.CreatFrame();

}

public void CreatFrame() {
JFrame jFrame = new JFrame("各区时间");

JButton jButton1 = new JButton("开始");
JPanel jPanel = new JPanel();

jPanel.add(jButton1);
Run r1 = new Run();
ButtonListen bl = new ButtonListen(r1);
jButton1.addActionListener(bl);
jFrame.add(jPanel, BorderLayout.SOUTH);
  jFrame.add(jLabel, BorderLayout.CENTER);

jFrame.setSize(800, 600);
jFrame.setVisible(true);

}

class ButtonListen implements ActionListener {
private Run r1;

public ButtonListen(Run r) {
this.r1 = r;

}

public void actionPerformed(ActionEvent arg0) {
r1.flag = true;
Thread thread = new Thread(r1);
thread.start();

}

}

class Run implements Runnable {

boolean flag;

public void run() {
while (flag) {
jLabel.setText(" 北京时间:" + cl3.getTime());
try {
Thread.sleep(10);
} catch (InterruptedException e) {


e.printStackTrace();
}
}

}

}

}



如果cl3.getTime()改用Math.random()就可以 但是要输出时间就不行。。。

------解决方案--------------------
Java code

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TestTime {

    JLabel jLabel = new JLabel("北京時間");
    public static void main(String[] args) {
        TestTime tt = new TestTime();
        tt.CreatFrame();
    }

    public void CreatFrame() {
        JFrame jFrame = new JFrame("各區時間");

        JButton jButton1 = new JButton("開始");
        JPanel jPanel = new JPanel();

        jPanel.add(jButton1);
        Run r1 = new Run();
        ButtonListen bl = new ButtonListen(r1);
        jButton1.addActionListener(bl);
        jFrame.add(jPanel, BorderLayout.SOUTH);
        jFrame.add(jLabel, BorderLayout.CENTER);

        jFrame.setSize(800, 600);
        jFrame.setVisible(true);

    }

    class ButtonListen implements ActionListener {
        private Run r1;

        public ButtonListen(Run r) {
            this.r1 = r;
        }

        public void actionPerformed(ActionEvent arg0) {
            r1.flag = true;
            Thread thread = new Thread(r1);
            thread.start();
        }
    }

    class Run implements Runnable {
        boolean flag;
        public void run() {
            while (flag) {
                jLabel.setText(" 北京時間:" + Calendar.getInstance().getTime());
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}