软件开发

当前位置:首页 > 软件开发

《Java核心技术高级特性》(第六章)(续)

6.2表格.

JTable构件用于显示二维对象表格。当然,表格在用户界面中很常见。Swing 开发小组

将大量的精力投人到了表格控制方面。表格本身比较复杂,但是它可能比其他Swing类更为

成功,因为JTable构件隐藏了更多的复杂性。只需编写几行代码就能够产生具有完全功能化

的、行为丰富的表格。当然,还可以编写更多的代码,为具体应用定制显示外观和运行特性。

在本节中,我们将着重讲解怎样产生简单表格,用户怎样与它们交互,以及怎样进行一

些最常见的调整操作。与其他一些复杂的Swing构件- -样, 我们不可能覆盖所有的细节。如

果想获得详细信息,请查阅David M. Geary撰写的《Graphic Java》(第3版)或Kim Topley

撰写的《Core Swing》。

6.2.1简单表格

与JList构件类似,JTable 并不存储它自己的数据,而是从一个表格模型中获取它的

数据。JTable 类有一”个构造器能够将-个二维对象数组包装进--个默认的模型。这也正是我们第-一个示例

程序要用到的策略。在本章的后续部分,我们将转向介绍表格模型。

图6-5展示了一个典型的表格,用于描述太阳系各个行星的属性。(如果一个行星主要由氢气和氦气组成,

那么它就是气态行星。对于“Color” 项,你应该了解

其期大的作用,我们之所以将它添加为一列是因为在后面的示例代码中,它是很有用的。)

正如你在程序清单6-5中见到的那样,表格中的数据是以object值的二维数组的形式

存储的:

0bject[]O cells = 
{ "Mercury", 2440.0 0, false, COlor.ELLON },
{ "Venus", 6052.0, 0, false, Color.ELLON },
}

新梦想IT职业教育

注意:这里, 我们充分利用了 自动装箱。第二列、第三列、第四列中的项会自动转换 成

类型为Doub1e、Integer 和Boolean的对象。

该表格直接调用每个对象上的toString方法来显示它们,这也正是为什么颜色显示成

为java . awt.Co1or[r=... ,g=...,b=...]的原因所在。

可以用一个单独的字符串数组来提供列名:

String[] columnNames= { "Planet" ,"Radius", "oons", "Gaseus", "Color" };

接着,就可以从单元格和列名数组中构建-一个 表格:

JTable table = new JTable(ells, columnNames);

最后,通过将表格包装到一个JScro11Pane中这个常用方法来添加滚动条:

JSrol1Pane pane = new ISrol1Pane(table);

口注意: JTab1e与JList不同,它并非泛型。这么做是有原因的,列表中的元素总是具

有统一类型的,但是,通常整个表格不会只有单一的元素类型。例如,在我们的示例中,

行星名是字符串,颜色是java. awt. Co1or对象。

这样产生的表格已经具有令人吃惊的丰富行为特性了。可以垂直调整表格的尺寸大小直

到滚动条显现出来,然后滚动表格。请注意,列表头并不会滑出视图的外面。

接着,单击列表头的某一列,并且向左或向右拖拉。看看整个列是怎样移开的(参

见图6-6),你可以将它放到别的位置上。这种列的重新排列只是视图上的重新排列,对数

据模型没有任何影响。

如果要调整列的尺寸大小,只需将鼠标移到两列之间,直到鼠标的形状变成箭头为止,

然后将列的边界拖移到你期望的位置上(参见图6-7)。

新梦想IT职业教育

用户可以通过点击行中任何一个地方来选中一行,而选中的行会高亮显示,后面将会介

绍怎样获取这些选择事件。通过单击- -个单元格并键入数据,用户还可以编辑表格中的各个

项。不过,在这个代码示例中,这些编辑并没有改变底层的数据。在程序中,你应该要么使

这些单元格不可编辑,要么处理单元格编辑事件并更新你的模型。我们将会在本节的后面对

这些问题进行讨论。

最后,点击列的头,行就会自动排序。如果再次点击,排序顺序就会反过来。这个行为

是通过下面的调用激活的:

table.setAutoCreateRowSorter(true);

可以使用下面的调用对表格进行打印:

table.print0;

此时会出现一个打印对话框, 并将表格传送给打印机。我们将在第7章讨论定制打印选项。

口注意: 如果调整TableTest框架的尺寸,使它的高度超过了表的高度,那么就会看到表

的下方有一块灰色区域。与JList和JTree构件不同,表没有填充滚动面板视图。当

希望支持拖拽时,这可能会成为一个问题(关于拖拽的更多信息,请查看第7章)。在这

种情况下,可以调用

tlblectilsviemortHeight(true);


相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~