月蚀传说

浮躁让人失去理智
posts - 25, comments - 101, trackbacks - 0, articles - 0
  语源科技BlogJava :: 首页 ::  :: 联系 :: 聚合  :: 管理

数据库字段的显示以及增加

Posted on 2006-10-09 19:02 Dart 阅读(4034) 评论(5)  编辑  收藏 所属分类: GEF

隔了将近一个月,我终于可以在家上网了——我又回来了。由于搬家后没有网上,本来这篇应该早就写完的文章也只能拖了这么久才“发布”。

在这一章,我说一下如何去利用布局,以及其他一些关于EditPolicy的用法和Palette的实现。说明一下,示例代码和本章内容中的代码有出入,这是因为以前我是做一点写一点,这次我完成得比较多,但是由于涉及技术有一些差异,所以我将分成两篇文章讲完,我建议大家看完第5章后再下代码。代码下载.

1.重新显示TableFigure

上一章中,我们简单地绘制了一个矩形,充当我们的数据库表的图形,现在让我们重新想想,如何显示这个TableFigure。

让我们看看Visio里面是怎么显示的吧:



我们也按照它的样子做一个类似的!

首先,我们需要显示我们的表名,其次,我们要将数据字段显示在表名下放的区域中,然后再在表名和存放数据库字段的区域之间画一条线,分割开。看下图:


看来我们以前写的TableFigure还差太远,仅仅一个矩形还不够。

先考虑一下如何显示表名。在TableFigure中显示一条文字很容易的,简单的方法就是在绘制它的时候,利用Graphics的drawText方法即可,但是这样做很繁琐,需要不停的计算表名显示位置,并且,当我们的表名发生改变的时候,表自身大小该如何调节呢。所以我们需要利用Label来显示,因为Label可以很容易地对显示的表名进行维护,包括计算文字长度获得Figure该具有的大小等;此外,当我们使用Label来显示的话, TableFigure还可以通过布局管理器来计算自己当前的大小,这又省得我们自己计算了。打开TableFigure类,增加以下代码:

public  TableFigure(Table model) {
        super();
        
this .model  =  model;

        tableNameLabel 
=   new  Label();
        tableNameLabel.setText(model.getTableName());
        FontData fd 
=   new  FontData();

        fd.setHeight(
10 );
        fd.setName(
" Arial " );
        fd.setStyle(SWT.BOLD);

        tableNameLabel.setFont(
new  Font( null , fd));
        tableNameLabel.setIcon(ImageProvider.TABLE_ICON.createImage());
        tableNameLabel.setLabelAlignment(PositionConstants.MIDDLE);

        
//  留出一点边距,会好看点
         this .setBorder( new  MarginBorder( 8