SWT中如何为Shell或Composite设置背景图片及指定图片相对路径
解决方案
- 第一步:确认打包配置
打开你插件项目的build.properties文件,确保bin.includes配置项包含了你存放图片的路径,示例配置如下:
bin.includes = META-INF/,
.,
plugin.xml,
src/
配置后src下的images文件夹会被一起打包到插件中,运行时才能正常读取到资源。
- 第二步:加载图片并设置为Shell背景
Eclipse插件开发不能直接使用普通Java文件的相对路径,需要通过类加载器或者插件Bundle来定位资源,完整修改后的代码示例如下:
import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class createShell{ // 替换为你实际的图片文件名 private static final String BG_IMAGE_PATH = "images/你的背景图文件名.png"; public void initShell() { System.out.println("Inside shell create"); Display display = new Display(); Shell shell = new Shell(display); shell.setSize(990, 590); shell.setLayout(new GridLayout()); // 加载背景图片 Image bgImage = null; try { // 直接通过当前类的相对路径读取同级images目录下的资源 bgImage = new Image(display, createShell.class.getResourceAsStream(BG_IMAGE_PATH)); shell.setBackgroundImage(bgImage); // 若需要子组件继承背景可添加下行配置 // shell.setBackgroundMode(SWT.INHERIT_FORCE); } catch (Exception e) { e.printStackTrace(); } Composite comp = new Composite(shell, SWT.NO_FOCUS); comp.setBounds(10, 10, 720, 400); // 窗口关闭时释放图片资源,避免SWT内存泄漏 Image finalBgImage = bgImage; shell.addDisposeListener(e -> { if (finalBgImage != null && !finalBgImage.isDisposed()) { finalBgImage.dispose(); } }); } }
内容的提问来源于stack exchange,提问作者Dee
相关产品推荐
相关产品推荐

