swt 设为背景的图片为什么会消失

yzg000123 2009-05-25 10:37:50
先把代码看下
if(enforc == true){
image = new Image(display, compositeImage.getClientArea().width,
compositeImage.getClientArea().height);
image.type = SWT.BITMAP;
r_gc = new GC(image);
int min_x = table_min_x;
int max_y = table_max_y;
// 画图开始位置
for (int i = 0; i < LIST_R_SIZE; i++) {
r_coordinate_x = (file_r_x[i] - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
r_coordinate_y = (drawpictureRate_y * picture_h - file_r_y[i] + table_max_y)
/ drawpictureRate_y - (picture_h - pictureBegin_y);
r_gc.setForeground(display.getSystemColor(SWT.COLOR_BLUE));
r_gc.drawOval(r_coordinate_x, r_coordinate_y, diameter, diameter);
}
for (int i = 0; i < LIST_S_SIZE; i++) {
s_coordinate_x = (file_s_x[i] - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
s_coordinate_y = (drawpictureRate_y * picture_h - file_s_y[i] + table_max_y)
/ drawpictureRate_y - (picture_h - pictureBegin_y);
r_gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
r_gc.drawLine(s_coordinate_x, s_coordinate_y - s_length,
s_coordinate_x, s_coordinate_y + s_length);
r_gc.drawLine(s_coordinate_x - s_length, s_coordinate_y,
s_coordinate_x + s_length, s_coordinate_y);
}

// 竖线
picture_table_min_x = (table_min_x - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
picture_table_max_x = (table_max_x - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
picture_table_max_y = (drawpictureRate_y * picture_h - table_min_y + table_max_y)
/ drawpictureRate_y - (picture_h - pictureBegin_y);
picture_table_min_y = (drawpictureRate_y * picture_h - table_max_y + table_max_y)
/ drawpictureRate_y - (picture_h - pictureBegin_y);

for (int i = 0; i < table_width_line; i++) {
picture_table_min_x = (min_x - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
r_gc.setAlpha(35); // 透明度
r_gc.drawLine(picture_table_min_x, picture_table_min_y,
picture_table_min_x, picture_table_max_y);
min_x += table_scale_w;
}
// 横线
picture_table_min_x = (table_min_x - table_min_x) / drawpictureRate_x
+ pictureBegin_x;
for (int i = 0; i < table_height_line; i++) {
picture_table_min_y = (drawpictureRate_y * picture_h - max_y + table_max_y)
/ drawpictureRate_y - (picture_h - pictureBegin_y);
r_gc.setAlpha(35); // 透明度
r_gc.drawLine(picture_table_min_x, picture_table_min_y,
picture_table_max_x, picture_table_min_y);
max_y -= table_scale_h;
}
r_gc.copyArea(image, 0, 0);
r_gc.drawImage(image, 0, 0);
r_gc.dispose();
compositeImage.setBackgroundImage(image);
enforc = false;
}

因为对画图生成不太了解,上面的代码我认为是直接将图片画到了内存当中然后在设为Composite 的背景的,问题是我在一个放大的功能里重新画图设为背景,开始没什么问题,到了最后放的较大的时候图片北京图片就消失了。不知道是为甚么。有没有解决办法。谢谢各位高手了帮忙解决下好吗?

...全文
101 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
njclsc 2009-05-26
  • 打赏
  • 举报
回复
背景容器添加一个滚动条,这样放的在大都可以看到了,还有你的控件要有向对应的类型,
yzg000123 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yzg000123 的回复:]
放大的时候我将图片image.dispose();了,然后又重新画图设为背景的。
[/Quote]
不是图片大的看不到了,是报异常了。
Exception in thread "main" org.eclipse.swt.SWTError: No more handles
at org.eclipse.swt.SWT.error(SWT.java:3589)
at org.eclipse.swt.graphics.Image.init(Image.java:1577)
at org.eclipse.swt.graphics.Image.<init>(Image.java:174)
at new_picture.Draw3D.drawPicture3D(Draw3D.java:520)
at new_picture.Draw3D.magnify(Draw3D.java:871)
at new_picture.Interface$10.widgetSelected(Interface.java:318)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at new_picture.Interface.main(Interface.java:360)
yzg000123 2009-05-25
  • 打赏
  • 举报
回复
放大的时候我将图片image.dispose();了,然后又重新画图设为背景的。

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧