A调用B但更改A的内容,若希望B不发生改变,可以创建一个接口,连接A,B
1.创建一个接口M
2.用A实现这个接口
3.通过构造函数把接口传到B中,在B中使用接口方法
(或者使用队列,在B中设置一个ADD方法)
4.在A中实例化B,并把A作为M接口传入B(队列:把A加入B),这样在修改A时,无需修改B的内容,在B中使用的M方法即为A中实现的方法。
class="java" name="code">//接口
public interface MsgListener {
public void recvMsg(String msg);
}
/**
* 计时
* @author Administrator
*
*/
public class Time extends Thread{
//接口
private MsgListener listener;
//接口队列
private ArrayList<MsgListener> listeners=new ArrayList<MsgListener>();
//向接口队列中添加接口
public void addListener(MsgListener listener){
listeners.add(listener);
}
public void run(){
//计时
while(true){
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
for(int i=0;i<listeners.size();i++){
MsgListener l=listeners.get(i);
l.recvMsg(""+System.currentTimeMillis());
}
}
}
}
/**
* 主函数
* @author zll
* 在ui中进行修改时,无需变动time中的内容
*/
public class TimeUI implements MsgListener{
JLabel label;
//基本界面
public void initUI(){
JFrame jf=new JFrame();
jf.setDefaultCloseOperation(3);
jf.setLayout(new FlowLayout());
jf.setSize(500, 500);
label=new JLabel();
jf.add(label);
jf.setVisible(true);
}
public void recvMsg(String msg) {
//显示msg
label.setText(msg);
}
public static void main(String[] args){
TimeUI ui1=new TimeUI();
ui1.initUI();
Time time=new Time();
//在time 中添加接口(ui),在time的有关接口的方法中,用ui中的实例方法
time.addListener(ui1);
time.start();
}
}