我有一個透明圖像上的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(看起來像一個按鈕,與背景混合並且對用戶來說很直觀,因爲它看起來「可點擊」)。 –