0

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

假装的工作如下: - 在图形类中,我有三个要着色的 JPanel,每个 Panle 着色之间的间隔为 2 秒。

现在我有以下代码:

----------------------可观察类-------------- ------------------

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();
}

---------------------------------------观察者类---------- ------------------

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) {

}

你会怎么做?

提前致谢!!

4

1 回答 1

3

您将希望将您的观察者链接到您的可观察对象。为此,在您的主包(您正在创建 Observer 和 Observable 对象的地方)中,您将拥有如下代码:

ImageController ic = new ImageController()
Imagen obs = new Imagen()

ic.addObserver(obs)

现在在 Observer 的 Update 方法中,你实现了当 Observable 通知它的 Observers 时你想要发生的事情。

最后,您可以使用 Observable 的setChanged()方法来指示 Observable 中的某件事发生了变化。下一次notifyObservers()被 Observable 调用时,所有注册的 Observer 都会被告知发生了变化。

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

于 2012-07-12T18:30:17.927 回答