龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

通过Java Swing看透MVC设计(2)

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
一个实例 现在我们已经明白了Java类与MVC各个部分的对应关系,我们可以更加深入一点去分析问题了。下面我们将要讲述一个小型的使用MVC模式开发的例子

   一个实例

  现在我们已经明白了Java类与MVC各个部分的对应关系,我们可以更加深入一点去分析问题了。下面我们将要讲述一个小型的使用MVC模式开发的例子。因为JFC十分的复杂,我只能把我的例子局限于一个用户界面组件里面(如果你猜是一个按钮的例子,那么你对了!)

  让我们来看看这个例子的所有部分吧。

  Button类

  最显而易见的开始的地方就是代表了按钮组件本省的代码,因为这个类是大部分程序员会接触的。

  就像我前面提到的,按钮用户界面组件类实际上就是model和view/controller的之间的黏合剂。每个按钮组件都和一个model以及一个controller关联,model定义了按钮的行为,而view/controller定义了按钮的表现。而应用程序可以在任何事件改变这些关联。让我们看看得以实现此功能的代码。

  public void setModel(ButtonModel buttonmodel)
  {
  if (this.buttonmodel != null)
  {
  this.buttonmodel.removeChangeListener(buttonchangelistener);
  this.buttonmodel.removeActionListener(buttonactionlistener);

  buttonchangelistener = null;
  buttonactionlistener = null;
  }

  this.buttonmodel = buttonmodel;

  if (this.buttonmodel != null)
  {
  buttonchangelistener = new ButtonChangeListener();
  buttonactionlistener = new ButtonActionListener();

  this.buttonmodel.addChangeListener(buttonchangelistener);
  this.buttonmodel.addActionListener(buttonactionlistener);
  }

  updateButton();
  }

  public void setUI(ButtonUI buttonui)
  {
  if (this.buttonui != null)
  {
  this.buttonui.uninstallUI(this);
  }

  this.buttonui = buttonui;

  if (this.buttonui != null)
  {
  this.buttonui.installUI(this);
  }

  updateButton();
  }

  public void updateButton()
  {
  invalidate();
  }

  在进入下一节之前,你应该多花一些时间来仔细阅读一下Button类的源代码。

  ButtonModel类

  ButtonModel维护着三种类型的状态信息:是否被按下(pressed),是否“武装上了”(armed),是否被选择(selected)。它们都是boolean类型的值。

  一个按钮被按下(pressed)是指当鼠标在按钮上面的时候,按下鼠标但是还没有松开鼠标按钮的状态,及时用户此时把鼠标拖拽到按钮的外面也没有改变这种状态。

  一个按钮是否“武装了”(armed)是指按钮被按下,并且鼠标还在按钮的上面。

  一些按钮还可能被选择(selected),这种状态通过重复的点击按钮取得true或者false的值。

  下面的代码是状态pressed的一个缺省的实现。状态armed以及selected实现的代码与之类似。ButtonModel类应该被继承,这样可以覆盖缺省的状态定义,实现有个性的按钮。

  private boolean boolPressed = false;

  public boolean isPressed()
  {
  return boolPressed;
  }

  public void setPressed(boolean boolPressed)
  {
  this.boolPressed = boolPressed;
  fireChangeEvent(new ChangeEvent(button));
  }

  在进入下一节之前,你应该多花一些时间来仔细阅读一下ButtonModel类的源代码。

精彩图集

赞助商链接