2012-07-12 148 views
0

我想實現一個應用程序,其中我有兩個類(一個圖形和一個控制器)。 Mi的目的是爲了反映在圖形控制器類中發生的變化。我需要通過使用觀察者模式來完成它,但我不知道如何得到它...觀察者模式

假裝的工作如下: - 在圖形類中,我有三個我想要的JPanel在每個Panle之間以兩秒的間隔着色是彩色的。

現在我有以下代碼:

----------------------可觀察類---------- ----------------------------------

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

--------- ------------------ Observer class ------------------------------ ----------

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

} 

你會怎麼做?

在此先感謝!

+0

在MVC中,控制器從未觀察到的一個,但觀察者。事件發生在GUI或模型上,Controller將更新從一個路由到另一個路由。 – 2012-07-12 18:22:37

+0

這是一個功課練習嗎? – 2012-07-12 18:27:56

回答

3

您將要將觀察者鏈接到可觀察對象。要做到這一點,在你的主pacakge(在那裏你既創造了觀察和可觀察對象),你有這樣的代碼:

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

ic.addObserver(obs) 
在觀察者的更新方法

現在,你實現你想要什麼當Observable通知它是觀察者時發生。最後,您可以使用Observable的setChanged()方法來指示Observable中的某些內容發生了變化。下一次notifyObservers()被Observable調用時,所有註冊的觀察者都會被告知有變化。

請注意,如果setChanged()沒有notifyObservers()之前調用,沒有觀察員將被通知(因爲沒有什麼可約通知他們)

+0

+1有一個相關示例[此處](http://stackoverflow.com/a/3072979/230513)。 – trashgod 2012-07-12 18:42:43