回到顶部
您的当前位置: 编程语言> JAVA> JAVA基础> 系列教程
Java进阶(十)MVC和Swing模型
2014-04-08 11:57:30
标签: 网络整理 Java 进阶 MVC和Swing模型

Swing用户界面组件是利用MVC体系结构的变体来实现的。

一:MVC

模型—视图—控件结构是一种开发组件的方法,它将数据存储和数据处理从数据的可视化表示中分离出来。存储和处理数据的组件称为模型,它包含组件的实际内容。表示数据的组件称为视图,它处理组件所有必要的行为。想到该组件时在你脑海中的印象就是视图,它完成组件的所有显示。控件通常是一种用来获取数据的组件。

把一个组件分解成模型与视图有两个明显优点:

1)可以使多视图显示成为可能,这样,可以通过同一模型共享数据。

2)可以简化复杂应用程序的编写,使得组件具有可伸缩性,并且易于维护。

模型包含数据,而视图使数据对外界可见。一旦一个视图与一个模型建立联系,它一定要与该模型同步。这样,可以确保模型的所有视图显示的数据都与模型的数据保持一致。

Java事件委托模型提供一种很好的架构以支持MVC组件模型的开发。

模型用来存储和处理数据,视图负责显示数据。

MVC的变体:

模型—视图—控件体系结构的一个变体是将控件和视图组合在一起。在这种情况下,视图不仅显示数据,也作为接口和用户的输入。

二:Swing模型—视图—控件体系结构

每个Swing用户界面组件都有一个名为model的属性,它表示组件的数据模型。数据模型定义在名字以Model结尾的接口中。

为了方便起见,大多数Swing组件包含其关联模型的一些属性,在不知道它们的模型是否存在的情况下,可以从组件中直接访问和修改这些属性。

如果创建一个Swing组件时没有指定模型,则将默认的数据模型赋值给该模型的属性model。

例如,

// Set properties in the model
model.setActionCommand("OK");
model.setMnemonic('O');

也可以创建一个新模型并把它赋值给Swing组件。

// Assign the model to the button
jbt.setModel(model);
三:JSpinner

微调文本域(spinner)是一个右侧含有一对小箭头按钮的文本域,它允许用户从一个有序序列中选择数字、日期或值。

要显示一个非整数序列,必须使用微调文本域模型。

SpinnerModel是所有微调文本域模型的一个接口。

SpinnerListModel是SpinnerModel的一个简单实现,它的值存储在java.util.List中。

可以使用数组或列表创建SpinnerModel对象。例如,下面的代码用数组创建了一个模型:

// Create an array
String[] grades = {"Freshman","Sophomore","Junior","Senior","Graduate"};
 
// Create a model from an array
model = new SpinnerListModel(grades);

另外,使用列表页可以创建模型,如下面代码所示:

// Create an array
String[] grades = {"Freshman","Sophomore","Junior","Senior","Graduate"};
 
// Create an ArrayList from the array
list = new ArrayList(Arrays.ASList(grades));
// Create a model from the list
model = new SpinnerListModel(list);

上面另外的代码似乎没有必要。数组一旦被创建,其大小就是固定的。列表是一个灵活的数据结构,通过它可以动态地添加或删除元素。

还有SpinnerNumberModel和SpinnerDateModel

四:JList及其模型

列表框布局方向:

layoutOrientation属性用来指定列表框中条目的布局,采用下面三个值之一:

1)JList.VERTICAL指定单元格应该垂直摆放在一列中,这是默认值。

2)JList.HORIZONTAL_WRAP指定列表单元格应该水平摆放,必要时换到新的一行。

3)JList.VERTICAL_WRAP指定列表单元格应该垂直摆放,必要时换到新的一行。

列表框选择模式和列表框选择模型:

属性selectionMode可以取三个值之一,分别表明选择的是单个条目、单区间条目或者多区间条目。

属性selectionMode表示一个跟踪列表框选择的对象。JList有两个模型:列表模型和列表选择模型。

列表模型:

如果想在列表框中添加新条目或删除已有的条目,就必须使用列表模型。

所有的列表模型都实现ListModel接口,这个接口定义ListDateEvent事件的注册方法。

列表框单元格绘制器:

如下所示:

public Component getListCellRendererComponent
  (JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)

该方法传递的参数有列表框、与单元格关联的值、该值的下标,以及该值是否被选定和单元格是否有焦点的判断信息。

JComboBox:

JComboBox将存储和维护数据的任务委托给它的数据模型。