gpt4 book ai didi

java - 观察者模式

转载 作者:行者123 更新时间:2023-12-02 00:18:35 25 4
gpt4 key购买 nike

我想实现一个应用程序,其中有两个类(图形类和 Controller 类)。 Mi 的目标是在图形中准确地反射(reflect) Controller 类中发生的更改发生的时间。我需要使用观察者模式来做到这一点,但我不知道如何获得它......

假装的工作如下:- 在图形类中,我有三个 JPanel,我想对它们进行着色,每个 Panle 着色之间有两秒的间隔。

现在我有以下代码:

----------------------Observable 类------------------------ ----------------------------------

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

}

你会怎么做?

提前致谢!!

最佳答案

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

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

ic.addObserver(obs)

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

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

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

关于java - 观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11458050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com