以下代码我写的关于Observable的代码,意图是当点击两个Button中的任何一个时,两个Button的Label都变为“clicked“,但是运行时却是点击哪个Button哪个上Button变而已,为什么得不到正确的结果呢?实在找不出哪里有错了,各位大哥大姐帮帮忙,谢谢了。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class NewObservable extends Observable
{
public void notifyObservers(Object b)
{
setChanged();
super.notifyObservers(b);
}
}
class NewButton extends Button implements Observer
{
public NewButton()
{
super();
}
public NewButton(String s)
{
super(s);
}
public void update(Observable ob,Object arg)
{
((NewButton)arg).setLabel("clicked");
}
}
public class TestObserver extends Frame implements ActionListener
{
NewButton b1=new NewButton("b1"),b2=new NewButton("b2");
Observable ob=new NewObservable();
public TestObserver()
{
ob.addObserver(b1);
ob.addObserver(b2);
setLayout(new FlowLayout());
b1.addActionListener(this);
b2.addActionListener(this);
add(b1);
add(b2);
setSize(300,200);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
ob.notifyObservers((NewButton)e.getSource());
}
public static void main(String[] args)
{
new TestObserver();
}
}
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class NewObservable extends Observable
{
public void notifyObservers(Object b)
{
setChanged();
super.notifyObservers(b);
}
}
class NewButton extends Button implements Observer
{
public NewButton()
{
super();
}
public NewButton(String s)
{
super(s);
}
public void update(Observable ob,Object arg)
{
((NewButton)arg).setLabel("clicked");
}
}
public class TestObserver extends Frame implements ActionListener
{
NewButton b1=new NewButton("b1"),b2=new NewButton("b2");
Observable ob=new NewObservable();
public TestObserver()
{
ob.addObserver(b1);
ob.addObserver(b2);
setLayout(new FlowLayout());
b1.addActionListener(this);
b2.addActionListener(this);
add(b1);
add(b2);
setSize(300,200);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
ob.notifyObservers((NewButton)e.getSource());
}
public static void main(String[] args)
{
new TestObserver();
}
}
解决方案 »
- 我是超级菜新人,想问问this。
- 弟问哥:怎么想swing中嵌入google earth? JDIC高手进。。
- 中文问题+access(系统环境为英文操作系统)
- JAVA练习题,能做多少就做多少。
- 我在Frame中添加的容器 在窗口中显示不出来 ,请进来看看谢谢有代码!!
- 关于HashMap排序的问题
- 提问 c# 中的 XmlTextWriter 相当于java里的那个类 ????(在线等)
- FrontPage问题
- java如何将明文加密成密文存到数据库中?
- 查询图片,图片文件存放在数据库中好,还是存放路径好,是否有更好的解决办法
- 十万火急!!!(如何还原数据表中二进制字段值)
- 这个程序为什么不行?
public void update(Observable ob,Object arg)
{
// ((NewButton)arg).setLabel("clicked");
this.setLabel("clicked");
}因为当这个observer接到notify之后是要更新自己的label,所以当button1和button2接到notify之后都会更新。楼主原来的代码的意思是只更新被按下的button的label,所以不合适本人已经测试过
super.notifyObservers(b); 这里 b 是 状态, 不应该被理解成 Observer .
( 你上面把一个按钮当成了 notifyObservers () 的参数是错误的, b 应该是 observer 感兴趣的状态)。notifyObservers () 检查所有已经被 addObserver 到队列中的 Observer , 告知它们 有状态改变了, 代表状态的对象是 b.
{
public void notifyObservers(Object status)
{
setChanged();
super.notifyObservers(status);
}
}
.../////////////
public class TestObserver extends Frame implements ActionListener
{
NewButton b1=new NewButton("b1"),b2=new NewButton("b2");
Observable ob=new NewObservable();
ob.addObserver(b1); // 添加 观察员 b1,b2 让它们观察 NewObservable 状态改变。
ob.addObserver(b2); // 当状态改变时, NewObservable 会通知已经加入的观察员。
//. ...
}