Java 绘制图像SWT的特定部分
目前我正在研究SWT,为我们的应用程序创建UI。我陷入了困境。我正在使用画布绘制标题,其中包含一些图像。它还需要显示时间(每秒刷新一次)。虽然我已经完成了所有这些,但问题是我正在使用一个paintListener来绘制图像和当前时间 标题代码的部分如下所示:Java 绘制图像SWT的特定部分,java,layout,user-interface,swt,Java,Layout,User Interface,Swt,目前我正在研究SWT,为我们的应用程序创建UI。我陷入了困境。我正在使用画布绘制标题,其中包含一些图像。它还需要显示时间(每秒刷新一次)。虽然我已经完成了所有这些,但问题是我正在使用一个paintListener来绘制图像和当前时间 标题代码的部分如下所示: private void initHeader(){ header = new Canvas(shell,SWT.NONE); GridLayout gd = new GridLayout()
private void initHeader(){
header = new Canvas(shell,SWT.NONE);
GridLayout gd = new GridLayout();
gd.numColumns = 1;
gd.marginHeight = 10;
gd.marginBottom = 10;
gd.verticalSpacing = 0;
header.setLayout(gd);
header.setLayoutData(new GridData(SWT.FILL,SWT.BEGINNING,true,false));
header.layout();
//Paint listener for SDM Logo
header.addPaintListener(new PaintListener() {
private final Image bgLogoImage = new Image(Display.getDefault(),"resources/images/1stimage.png");
private final Image bgLockImage = new Image(Display.getDefault(),"resources/images/2ndimage.png");
private final Image bgHelpImage = new Image(Display.getDefault(),"resources/images/3rdimage.png");
private final int bgImageWidth = bgHelpImage.getBounds().width;
private final int bgImageHeight = bgHelpImage.getBounds().height;
private final int bgLockImageWidth = bgLockImage.getBounds().width;
private final int bgLockImageHeight = bgLockImage.getBounds().height;
@Override
public void paintControl(PaintEvent e) {
e.gc.drawImage(bgLogoImage, 0, 0);
Point lockSize = ((Control) e.widget).getSize();
e.gc.drawImage(bgLockImage, (lockSize.x - bgLockImageWidth) - 50, (lockSize.y
- bgLockImageHeight)/2);
Point size = ((Control) e.widget).getSize();
e.gc.drawImage(bgHelpImage, (size.x - bgImageWidth) - 10, (size.y
- bgImageHeight)/2);
e.gc.setBackground(new Color(display,225,43,41));
e.gc.setForeground(new Color(display,255,255,255));
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("MMM d,y E hh:mm:ss a");
e.gc.drawText(ft.format(dNow), header.getClientArea().width - 350, header.getClientArea().y + 10);
}
});
}
然后我使用一个线程每秒更新一次时间。
我的困难有两方面:
您可以在一个
组合中有两个控件,一个带有图像,一个带有时间,而不是一个画布。然后您可以在该控件的侦听器中重新绘制时间
是否需要将其中任何一个设置为画布
?您是否可以使用多个标签控件来保存图像或文本
如果要保留单个控件,可以使用重画(x,y,width,height,false)
指定要重画的控件区域。然后在paint listener中调用GC.getClipping
以获取控件中需要重新绘制的部分,并跳过任何不需要进行的绘制操作。我对您的问题没有答案,但请记住dispose()
您自己分配的所有资源,像画质监听器中的图像
s。否则你可能会没办法了。对不起,我不太明白你的问题。首先,你为什么要设计你的应用程序,让它每秒钟刷新一次?UI更新通常在模型更新视图时完成。此外,如果您想组装自定义的图像
,您可以构建一个图像生成器
(从StringBuilder
)来扩展合成图像描述符
。如果你阅读javadoc并仔细阅读一些例子,你就会很容易理解它。@Baz:原来就是这样!谢谢你,巴兹!:)@Binayakacharaborty我做了什么?讽刺?@Baz:不,我一直收到一些奇怪的SWT错误,“失控”。我真的很感激……嗯,我不知道重画函数的重载,我会检查一下:)