软件开发

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

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

6.2.4单 元格的绘制和编辑

正如在第6.2.3节中看到的,列的类型确定了单元格应该如何绘制。Boolean 和Icon类

型有默认的绘制器,它们将绘制复选框或图标,而对于其他所有类型,都需要安装定制的绘

制器。

表格的单元格绘制器与你在前面看到的列表单元格绘制器类似。它们都实现了Tab1eCe11

Renderer接口,并只有一个方法

Component getTableCel1RendererComponent(JTable table, 0bject value, boolean isSelected,
boolean hasFocus, int row, int colurn)

该方法在表格需要绘制--个单元格的时候被调用。它会返回一个构件,接着该构件的

paint方法会被调用,以填充单元格区域。

在图6-12中的表格包含类型为Color的单元格,绘制器直接返回一个面板,其背景颜

色设置为存储在该单元格中的颜色对象,该颜色是作为value参数传递的。

class ColorTableCel1Renderer extends JPanel implements TableCel1Renderer
public Component getTableCelRendererComponent(Table table, 0bject value,
boolean isSelected, boolean hasFocus, int row, int column)
seacorud(olo) value);
if (hasFocus)
SetrdrnCunanagregtrar'lTe.fcuceCtighightBorer'");
else
setBorder(nu11);
return this;
}

正如你看到的那样,当该单元格获得焦点的时候,绘制器会安装一个边框。 (我们可以向

UIManager寻求合适的边框。为了发现查找的关键所在,我们可以深入Defau1tTab1eCe11

Renderer类的源码内部看个究竟。)

通常情况下,你可能还想设置单元格的背景颜色,以指示当前是否选中了它。这里我们

跳过这步,因为这会干扰我们现在讨论的显示颜色。程序清单6-4中的ListRenderingTest示

例展示了怎样在--个绘制器中指示选择状态。

o提示:如果你的绘制器只是绘制一个文本字符串或者一个图标,那么可以继承

DefaultTableCellRenderer这个类。该类会负责绘制焦点和选择状态。

新梦想IT职业教育

你必须告诉表格要使用这个绘制器去绘制所有类型为Color的对象。JTable类的

setDefaul tRenderer方法可以让你建立它们之间的这种联系。你需要提供-一个C1ass对

象和绘制器。

tablesetDefaultRenderer(olor.class,s new ColorTableCelRenderer0);

现在这个绘制器就可以用于表格中具有给定类型的所有对象了。

如果想要基于其他标准选择绘制器,则需要从JTab1e类中扩展子类,并覆盖

getCellRender方法。

1.绘制表头

为了在表头中显示图标,需要设置表头值。

monounsetHeaderValue(new InageCon'"Moos,gif));

然而,表头还未智能到可以为表头值选择一个 合适的绘制器,因此,绘制器需要手工安

装。例如,要在列头显示图像图标,可以调用:

monmosetredererealegleetedererCagrigangaatl);

2.单元格编辑

为了使单元格可编辑,表格模型必须通过定义isCellEditable方法来指明哪些单元格

是可编辑的。最常见的情况是,你可能想使某几列可编辑。在这个示例程序中,我们允许对

表格中的四列进行编辑。

public boolean icel1Editable(int r, int c)
returmc■PLANET. COLUIN II C = MOONS _COLUN I C = CASEOUS COLUIN II C = COLOR COLUMN;

注意: AbstractTab1eMode1 定义的isCe11Editable方法总是返回false。DefaultTable

Mode1覆盖了该方法以便总是返回true。

运行一下程序清单6-8到程序清单6-11的程序就会注意到,可以点击Gaseous列中的复选

框,并能选中或取消复选标记。如果点击Moons列中的某个单元格,就会出现- - 个组合框

(参见图6-13)。你很快就会看到怎样将这样一个组 合框作为- -个单元格编辑器安装到表格上。

新梦想IT职业教育

最后,点击第- -列中的某个单元格,该单元格就会获取焦点。你就可以开始键人数据,

而该单元格的内容也会随之更改。

你刚刚看到的是Defau1tCel1Editor类的三种变型。Defau1tCellEditor 可以用

JTextFie1d、JCheckBox或者JComboBox来构造。JTab1e类会 自动为Boolean类型的

单元格安装-一个复选框编辑器,并为所有可编辑的、但未提供它们自己的绘制器的单元格安

装一个文本编辑器。文本框可以让用户去编辑那些对表格模型getValueAt方法的返回值执

行toString操作而产生的字符串。

一旦编辑完成,通过调用编辑器的getCellEditorValue方法就可以读取编辑过的值。

该方法应该返回- -个正确类型的值(也就是模型的getCo1 umnType方法返回的类型)。

为了获得一个组合框编辑器,你需要手动设置单元格编辑器,因为JTable构件并不知

道什么样的值对某- -特殊类型来说是适合的。对于Moons列来说,我们希望可以让用户选择


相关内容

文章评论

表情

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