Windows系统下如何移除SWT按钮边框或使边框与按钮边界重合?
Windows下SWT按钮白色边框问题解决方法
以下是几种可行的解决思路:
自定义绘制按钮外观
完全绕过系统默认的按钮绘制逻辑,通过PaintListener手动绘制按钮,彻底控制边框和背景:Button customBtn = new Button(shell, SWT.NONE); customBtn.addPaintListener(e -> { GC gc = e.gc; Rectangle btnBounds = customBtn.getBounds(); // 填充与父容器一致的背景,消除视觉边框 gc.setBackground(customBtn.getParent().getBackground()); gc.fillRectangle(btnBounds); // 绘制按钮文本(可根据需求调整位置) gc.setForeground(customBtn.getForeground()); gc.drawText(customBtn.getText(), 8, 4, true); });调整布局的边距参数
Windows下的SWT按钮边框有时和布局的留白混淆,尝试清除布局的内外边距:// 给按钮所在的Composite设置无内外边距的GridLayout GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; layout.horizontalSpacing = 0; layout.verticalSpacing = 0; composite.setLayout(layout); // 按钮的GridData设置为无额外留白 GridData btnData = new GridData(SWT.FILL, SWT.FILL, true, true); btnData.widthHint = -1; btnData.heightHint = -1; customBtn.setLayoutData(btnData);使用SWT.BORDERLESS样式(版本依赖)
部分SWT版本支持SWT.BORDERLESS样式,创建按钮时添加该样式可直接移除边框:Button borderlessBtn = new Button(shell, SWT.PUSH | SWT.BORDERLESS);注意:该样式的支持性可能因SWT版本和平台而异,需要实际测试验证。
统一按钮与父容器背景色
如果白色边框只是按钮背景与父容器背景的视觉差,直接设置按钮背景与父容器一致即可:button.setBackground(button.getParent().getBackground());
内容的提问来源于stack exchange,提问作者sEul
相关产品推荐
相关产品推荐

