1、查询内部状态
2、操作内部状态
3、添加和删除事件监听器
4、发生事件
程序员通常并不会直接和model以及view/controller打交道,他们通常隐藏于那些继承自java.awt.Component的组件里面了,
这些组件就像胶水一样把MVC三者合三为一。也正是由于这些继承的组件对象,一个程序员可以很方便的混合使用Swing组件
和AWT组件,然后,我们知道,Swing组件有很多都是直接继承自相应的AWT组件,它能提供比AWT组件更加方便易用的功
能,所以通常情况下,我们没有必要混合使用两者。
一个实例一个实例
现在我们已经明白了Java类与MVC各个部分的对应关系,我们可以更加深入一点去分析问题了。下面将要讲述一个小型的使
用MVC模式开发的例子。因为JFC十分的复杂,我只能把我的例子局限于一个用户界面组件里面(如果你猜是一个按钮的例
子,那么你对了!)
让我们来看看这个例子的所有部分吧。
Button组件组件
最显而易见的开始的地方就是代表了按钮组件本身的代码,因为这个类是大部分程序员会接触的。
就像我前面提到的,按钮用户界面组件类实际上就是model和view/controller的之间的黏合剂。每个按钮组件都和一个model以
及一个controller关联,model定义了按钮的行为,而view/controller定义了按钮的表现。而应用程序可以在任何事件改变这些
关联。让我们看看得以实现此功能的代码。
注:以下代码是我从JDK1.4源代码AbstractButton类中提取出来的,因为查看Jbutton源代码(再次提供JDK1.4在线源代码地
址)我们可以发现,它是继承自AbstractButton类的,所以下面的代码是来自AbstractButton的,跟原文有点不一样:
1. /**
2.
3. * Sets the model that this button represents.
4.
5. * @param m the new <code>ButtonModel</code>
6.
7. * @see #getModel
8.
9. * @beaninfo
10.
11. * bound: true
12.
13. * description: Model that the Button uses.
14.
15. */
16.
17. public void setModel(ButtonModel newModel) {
18.
19.
20.
21. ButtonModel oldModel = getModel();
22.
23.
24.
25. if (oldModel != null) {