Feeling

    三人行,必有我师焉

   ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  185 随笔 :: 0 文章 :: 392 评论 :: 0 Trackbacks
复杂布局的重用,比较容易实现的就是GridLayout,至于FormLayout,基本上如果相似度不是很大,很难重用。我们在实现很多Page的时候,优先考虑的都会是GridLayout。但GridLayout在界面元素改动较大的时候也拥有一些弊端,比之FormLayout要麻烦的多。

当界面元素拥有上下文的时候,随着其上下文的改变,要想界面元素按照新的上下文重新布局,总是让人头疼。因为首先能想到的方法就是隐藏掉不需要的元素,这样会减少时间和代码上的开销。但是如果采用GridLayout布局的时候,一个Widget隐藏的时候,它仍然占用着界面空间,即使将它的hightHint和widthHint设置为0,依然不能解决问题,因为GridLayout通常设置了verticalSpacing和horizontalSpacing。

现在想到的一个解决方案就是将界面元素重新洗牌。 界面元素的生成由Model里的各个元素来决定。界面的上下文都交由一个属性控制层进行控制,它上承GUI界面,下接业务模型,属于一个过渡的层次。该层可以装饰业务模型,并附加上新的上下文,形成一个新的Model。根据这个新的Model,我们在界面上创造元素。如果Model仅仅只是值发生了变化,我们重新设置界面的值即可。如果Model发生了上下文的变化,比如不需要某个属性了或者是增加一个属性,我们就对整个界面进行重新洗牌,通过一个循环Dispose掉所有的Widget,然后根据新的上下文重新初始化界面元素,并进行赋值。由于MVC的分离,重新初始化界面是很容易的。对于不太复杂的Page,布局上的问题就可以迎刃而解,而且在时间上的开销也不会体现得很明显,至少并看不出显示上的延迟。

posted on 2006-06-16 13:54 三人行,必有我师焉 阅读(583) 评论(2)  编辑  收藏

评论

# re: 关于界面布局的重新洗牌 2006-06-20 18:17 黄金时代已过
用layoutData.exclude属性可以重新布局。
例如:想不显示button1,

button1.setVisible(false);
GridData layoutData = (GridData)button1.getLayoutData();
layoutData.exclude=true;
button1.getParent().layout();
  回复  更多评论
  

# re: 关于界面布局的重新洗牌 2006-07-07 16:28 八进制
layoutData.exclude不错,以前没有注意到。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航:
 
GitHub |  开源中国社区 |  maven仓库 |  文件格式转换