51,397
社区成员




package test;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MouseAndKeyEvent {
public Frame f;
public Button but;
public TextField tf;
public MouseAndKeyEvent() {
init();
}
public void init(){
f=new Frame("me frame");
f.setBounds(300, 200, 600, 500);
f.setLayout(new FlowLayout());
tf=new TextField(20);
but=new Button("退出");
f.add(tf);
f.add(but);
event();
f.setVisible(true);
}
public void event(){
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyEvent();
}
}
package swing;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TimeServer extends Thread{
private static String time;
public static String getTime(){
return time;
}
public void run(){
while(true){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
time = sdf.format(new Date());
System.out.println(time);
}
}
}
这是第一个线程 ,run()中不停地每隔一秒钟取一次时间,你可以在控制台看到时间的变化相当于
你所说的一直在变化的类的属性。
package swing;
import javax.swing.JFrame;
public class SelectTime extends Thread{
private static View view;
private static TimeServer timeServer = new TimeServer();
public SelectTime(){
Thread thread1 = new Thread(timeServer);
thread1.start();
}
public void run(){
View v = View.getView();
while(true){
v.getJt1().setText(timeServer.getTime());
}
}
}
上面是第二个线程 ,run()不停地取得第一个线程中不断变化的时间,并更改 文本框中的值
SelectTime() 在构造器中 开启了第一个线程
package swing;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class View extends JFrame{
private static SelectTime selctTime = new SelectTime();
private static JTextArea jt1 = new JTextArea();
private static View view ;
public static View getView(){
if(view == null){
view = new View();
}
return view;
}
public static JTextArea getJt1() {
return jt1;
}
public static void main(String[] args) {
view.getView();
view.setSize(800,600);
view.setVisible(true);
view.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container con = view.getContentPane();
con.setLayout(new GridLayout(2,1));
JPanel jp1 = new JPanel(new GridLayout(1, 1));
JPanel jp2 = new JPanel(new GridLayout(1, 1));
JButton jb1 = new JButton("开始计时");
jt1 = new JTextArea();
jp1.add(jt1);
jp2.add(jb1);
con.add(jp1);
con.add(jp2);
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jb1.setEnabled(false);
Thread thread = new Thread(selctTime);
thread.start();
}
});
}
}
这个类就是你上面的 相当于表现层的类,通过按钮的触发事件 开启第二个线程