我有一个透明图像上的Button
(无文字),它放置在Composite
。由于Composite
是白色(使用FormToolkit#createComposite(parent, SWT.NONE)
创建),因此我希望Button
背景具有相同的颜色。我该怎么做?如何更改SWT按钮背景颜色或使其透明
的Label
的伎俩,但没有阴影像Button
确实,当我点击它..
我有一个透明图像上的Button
(无文字),它放置在Composite
。由于Composite
是白色(使用FormToolkit#createComposite(parent, SWT.NONE)
创建),因此我希望Button
背景具有相同的颜色。我该怎么做?如何更改SWT按钮背景颜色或使其透明
的Label
的伎俩,但没有阴影像Button
确实,当我点击它..
一个Button
的背景颜色是由操作系统决定的。实际上,文档Control.setBackground()指出:
注意:此操作是一个提示,可能会被平台覆盖。例如,在Windows上,Button的背景无法更改。
这就是说,一个规避这可能的方式是覆盖漆事件,如下所示: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());
}
});
}
}
凡Theme
只是有所有已加载方便的图像。
您还需要确保父Composite
有后台模式设置为强制其背景色:
parent.setBackgroundMode(SWT.INHERIT_FORCE);
显然的缺点,这种方法是,你必须处理鼠标点击逻辑你自己(即mouseDown不会真正点击,直到鼠标被释放,所以你将不得不处理每个监听器方法中的按钮的状态)。
你能添加一个截图解释你在说什么吗? – Baz
很高兴。 [在此屏幕截图上](http://s8.postimg.org/myx1lpjfl/refresh.png),您可以看到带有图像的3个按钮版本。第一是我得到的,第二是标签(但不像按钮,这意味着它不会改变,如果我点击它或悬停)。注意它在复合材料的白色背景上。第三次刷新按钮是我想要的样子。这不是一个按钮,它是一个放在Section标题栏上的Action(看起来像一个按钮,与背景混合并且对用户来说很直观,因为它看起来“可点击”)。 –