You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SWT按钮图片无法铺满按钮存在边距问题求助

解决SWT按钮图片存在边距的问题

问题说明

在SWT中通过setImage()为按钮设置图片后,图片与按钮边缘存在间距,无法完全覆盖按钮背景。

解决方案

  • 修改按钮样式,移除默认内边距与边框:创建按钮时使用SWT.FLAT样式(可替代或组合SWT.PUSH),该样式会移除按钮默认的凸起边框和内边距,让图片更贴合按钮边缘。
  • 禁用按钮默认背景绘制(可选):如果仍有细微间距,可通过覆盖paintControl方法跳过默认背景绘制,直接渲染图片。
  • 用布局参数控制按钮尺寸:避免手动调用setSize(),改用GridData的widthHint和heightHint匹配图片尺寸,确保布局管理器正确渲染。

修改后的完整代码

Section sctnScript = toolkit.createSection(this, Section.TITLE_BAR);
sctnScript.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
toolkit.paintBordersFor(sctnScript);
sctnScript.setText("Script");

Composite titleBar = toolkit.createComposite(sctnScript);
titleBar.setBackground(new Color(Display.getCurrent(), 240, 243, 247));

GridLayout titleBarLayout = new GridLayout(2, false);
titleBarLayout.marginWidth = 0;
titleBarLayout.marginHeight = 0;
titleBar.setLayout(titleBarLayout);

sctnScript.setExpanded(true);
toolBar = new ToolBar(titleBar, SWT.FLAT | SWT.RIGHT);
toolkit.paintBordersFor(toolBar);

// 使用SWT.FLAT样式移除默认边框与内边距
Button button = toolkit.createButton(titleBar, "", SWT.FLAT);
GridData buttonData = new GridData(SWT.END, SWT.CENTER, false, false);
// 通过布局参数匹配图片尺寸
buttonData.widthHint = buttonImage.getBounds().width;
buttonData.heightHint = buttonImage.getBounds().height;
button.setLayoutData(buttonData);
button.setBackground(new Color(Display.getCurrent(), 240, 243, 247));
button.setImage(buttonImage);

// 可选:直接绘制图片消除细微间距
button.addPaintListener(e -> {
    if (buttonImage != null) {
        e.gc.drawImage(buttonImage, 0, 0);
    }
});

内容的提问来源于stack exchange,提问作者Siddhi Bansal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:52:44