gpt4 book ai didi

java - 如何更改 SWT 按钮背景颜色或使其透明

转载 作者:太空宇宙 更新时间:2023-11-04 07:04:06 25 4
gpt4 key购买 nike

我在按钮上有一个透明图像(无文本),该图像放置在Composite上。由于 Composite 是白色的(使用 FormToolkit#createComposite(parent, SWT.NONE) 创建),我希望 Button 背景具有相同的颜色。我该怎么做?

Label 可以解决问题,但没有像 Button 当我点击它时那样的阴影。

最佳答案

按钮的背景颜色由操作系统决定。事实上,Control.setBackground() 的文档指出:

Note: This operation is a hint and may be overridden by the platform. For example, on Windows the background of a Button cannot be changed.

也就是说,规避此问题的一种可能方法是覆盖绘制事件,如下所示:Changing org.eclipse.swt.widgets background color in Windows 。当我尝试这个时,结果有点奇怪。

最安全且最一致的方法是使用第二个图像中的标签,但在不同的鼠标事件上显示不同的图像以模拟按钮的行为。

这些图像可以通过将您想要的任何形状的阴影添加到图像本身来模拟阴影。每个图像的阴影也会发生变化,以给人一种按钮被按下或未被按下的印象。

例如,我正在思考以下内容:

public class MyButton { 

private final Label buttonLabel;

public MyButton(final Composite parent, final Theme theme) {
buttonLabel = new Label(parent, SWT.NONE);
buttonLabel.setImage(theme.getUpImage());
buttonLabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(final MouseEvent mouseEvent) {
buttonLabel.setImage(theme.getButtonPressedImage());
}
@Override
public void mouseUp(final MouseEvent mouseEvent) {
buttonLabel.setImage(theme.getButtonUpImage());
}
});
buttonLabel.addMouseTrackListener(new MouseTrackAdapter() {
@Override
public void mouseEnter(final MouseEvent mouseEvent) {
buttonLabel.setImage(theme.getButtonHoverImage());
}
@Override
public void mouseExit(final MouseEvent mouseEvent) {
buttonLabel.setImage(theme.getButtonUpImage());
}
});
}

}

其中主题仅包含已方便加载的所有图像。

您还需要确保父 Composite 已将背景模式设置为强制其背景颜色:

parent.setBackgroundMode(SWT.INHERIT_FORCE);

显然,这种方法的缺点是您必须自己处理鼠标单击逻辑(即,在释放鼠标之前,不会真正单击 mouseDown,因此您必须在每个监听器方法中处理按钮的状态)。

关于java - 如何更改 SWT 按钮背景颜色或使其透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21660030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com