gr8vyguy@Blogjava

SWT的Label中 的一个小问题

看下面的代码
Label label = new Label(shell,  SWT.NONE);
Image image 
= new Image(display,  "image.gif");
       
label.setText(
"text");
label.setImage(image);
label.setText(
"text");

这个时候label应该显示什么? 我所期待的是文本text. 然而很遗憾的是label还是显示image. 为什么会这样? 看了SWT的源码我才明白. 下面是Label类里setText方法的一部分,
 1 public void setText (String string) {
 2     checkWidget ();
 3     if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
 4     if ((style & SWT.SEPARATOR) != 0return;
 5     /*
 6     * Feature in Windows.  For some reason, SetWindowText() for
 7     * static controls redraws the control, even when the text has
 8     * has not changed.  The fix is to check for this case and do
 9     * nothing.
10     */
11     if (string.equals (text)) return;
12     text = string;
注意第11行, 当新的string的值和原来的一样时, 方法setText()直接返回了. 按源码里注释的解释,是为了减少Windows下的重画事件以提高性能.

我打算写这个到Eclipse的bug报告里, 我想这应该算一个bug, 欢迎大家讨论.

当然这种情况不是很常见, 但也不是没有, 我就碰到了,  知道了原因后, 解决的方法就很简单了.
label.setText("text");
label.setImage(image);
label.setText(label.getText() 
+ "a");
label.setText(
"text");
在setText()之前,先用不同的值调用一次setText().

另一个可能更好的方法是, Label类提供一个方法改变显示的模式,比如setShowText(). 但是我没有找到类似的方法.

posted on 2007-02-22 21:58 gr8vyguy 阅读(2568) 评论(2)  编辑  收藏 所属分类: Java

评论

# re: 发现SWT的Label里的一个Bug 2007-02-24 02:32 BeanSoft

好像 CLabel 就好些...不是太清楚 我也遇到这个问题了, 开始我还以为是 Label 不支持同时显示文本和图片.  回复  更多评论   

# re: 发现SWT的Label里的一个Bug 2007-02-24 02:52 喜来乐哈哈

Label确实不支持同时显示文本和图片  回复  更多评论   


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


网站导航:
 
<2007年2月>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

导航

统计

公告

  • 转载请注明出处.
  • msn: gr8vyguy at live.com
  • 常用链接

    留言簿(9)

    随笔分类(68)

    随笔档案(80)

    文章分类(1)

    My Open Source Projects

    搜索

    积分与排名

    最新评论