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
相关产品推荐
相关产品推荐

