首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >观察者模式

观察者模式
EN

Stack Overflow用户
提问于 2012-07-13 02:15:47
回答 1查看 742关注 0票数 0

我想实现一个应用程序,其中我有两个类(一个图形类和一个控制器类)。Mi的目标是在图形控制器类中准确地反映它们发生时的变化。我需要使用观察者模式来完成它,但是我不知道如何获得它……

假装的工作如下所示:-在图形类中,我有三个JPanels,我想在每个面板之间有两秒钟的间隔来着色。

到目前为止,我已经有了以下代码:

-#en0#

代码语言:javascript
复制
public class ImagenControl extends Observable{
private String panel1,panel2,panel3;
private int counter;
private Timer colorTimer;
private ActionListener colorListener=new ActionListener() {

    public void actionPerformed(ActionEvent ae) {
        if (counter==0){
            panel1="yellow";
            setChanged();
        }
        else if (counter==1){
            panel2="blue";
            setChanged();
        }
        else if (counter==2){
            panel3="green";
            setChanged();
        }
        if (counter==2)
            colorTimer.stop();
        else counter++;
    }
};
public void giveColor(){
    counter=0;
    colorTimer=new Timer(2000,colorListener);
    colorTimer.start();
}

代码语言:javascript
复制
public class Imagen extends javax.swing.JFrame implements Observer{


public Imagen() {
    initComponents();
}
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
    ImagenControl ctr=new ImagenControl();
    ctr.giveColor();
}                                     

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new Imagen().setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
// End of variables declaration                   

@Override
public void update(Observable o, Object o1) {

}

你会怎么做?

提前感谢!!

EN

回答 1

Stack Overflow用户

发布于 2012-07-13 02:30:18

你会想要将你的观察者链接到你的可观察对象上。要做到这一点,在你的主程序包中(在你创建观察者和观察者对象的地方),你会有如下代码:

代码语言:javascript
复制
ImageController ic = new ImageController()
Imagen obs = new Imagen()

ic.addObserver(obs)

现在,在观察者的Update方法中,当观察者通知它的观察者时,你实现了你想要发生的事情。

最后,您可以使用可观察对象的setChanged()方法来指示可观察对象中的某个内容发生了更改。下一次可观察对象调用notifyObservers()时,所有注册的观察者都将被告知发生了更改。

请注意,如果在notifyObservers()之前没有调用setChanged(),则不会通知观察者(因为没有什么需要通知他们的)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11458050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档