我想实现一个应用程序,其中我有两个类(一个图形和一个控制器)。 Mi的目的是反映图形中控制器类发生的变化。我需要通过使用观察者模式来实现,但我不知道如何获得它...
假装工作如下: - 在图形类中,我有三个JPanels,我想要着色,每个Panle之间的间隔为2秒。
到目前为止,我有以下代码:
---------------------- Observable class ----------------------- ---------------------
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类------------------ ----------------------
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 :(得分:3)
您想要将观察者链接到您的可观察对象。要做到这一点,在主要的pacakge中(你要创建Observer和Observable对象),你将拥有这样的代码:
ImageController ic = new ImageController()
Imagen obs = new Imagen()
ic.addObserver(obs)
现在,在Observer的Update方法中,实现Observable通知观察者时想要发生的事情。
最后,您可以使用Observable的setChanged()
方法来指示Observable中的某些内容已更改。 Observable下次调用notifyObservers()
时,所有注册的观察者都会被告知有变化。
请注意,如果在setChanged()
之前没有调用notifyObservers()
,则不会通知任何观察员(因为没有任何内容可以通知他们)