background image

Java

程序员 开发 SWT 应用两点心得

  原来没有用过 Java 做图形界面的客户端程序, 只是知道简单的一些 Java 图形编程的
原理. 近日一用, 还确实和 Window 下的其他开发方法方法大有不同. 我没有用过 AWT, 
也没用过 SWING, 在网上看到这不好,那不行. 遂直接用 SWT, 反正也能跨平台.
  1. Composite 刷新
  本来这看起来很简单, 但在 composite.open()后, 动态创建了几个 Control, 运行起
来就是不能显示, 反而原有的 control 可以 dispose()掉. 纳闷, 想不通. 记得在考 SCJP 时,
 AWT 还是 SWING 需要调用 redraw()重新更新画布, 调用之, 还是无效。
  在网上也找不到动态创建控件的资源, 以为 SWT 不支持动态创建, 刚想~!@#$%^
&*()_+. 绝望中看 SWT_Example, 发现里面的 LayoutExample 居然实现了动态创建
Button, 这不是俺要的吗? 将代码研读一遍, 看看 createDetailXXX, 没有特殊的地方, 
出去再看看调用, 使用了 composite.layout(true) 方法. 回头一试, 果然就是它.
  回头一想, 可能设计者不想让我们看到控件一个个的跳出来, 于是设计了这么一个方
法, 让控件一次刷屏.
  2. Control 父组件
  Window 程序动态创建一个控件时, 可以指定父控件为 Null, 再调用父组件的 add 方
法就可以加入到组件树中. SWT 似乎不能支持, 如果指定控件的 Composite 为 Null, 将
抛出异常. 必须指定一个父容器. 似乎不管 3*7=21, 将 shell 作为其 parent, 然后调用
composite.setParent()改变其 parent, 想一想, 不行. 如果使用 setParent 方法改变, 
其 shell 的 control 列表同样保留这个控件的拷贝, 而在 dispose()时总有不干净的干净
的感觉.
  原来搭好的框架, 因为必须指定 parent composite 而放弃.