将图像按钮放在图像背景上

时间:2011-08-31 10:49:28

标签: swt

我正在尝试将带有图像的按钮(GIF)放在已经设置为图像的背景上(shell.setBackgroundImage(image)),我无法弄清楚如何删除带图像的按钮周围的透明边框。如果有人能就这个问题给我一些提示,我将不胜感激。

这是我的代码:

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;

public class Main_page {
        public static void main(String[] args) {
                Display display = new Display();
                Shell shell = new Shell(display);
                Image image = new Image(display, "bg.gif");
                shell.setBackgroundImage(image);
                shell.setBackgroundMode(SWT.INHERIT_DEFAULT);
                shell.setFullScreen(true);

                Button button = new Button(shell, SWT.PUSH);
                button.setImage(new Image(display, "button.gif"));

                RowLayout Layout = new RowLayout();
                shell.setLayout(Layout);

                shell.open();
                while (!shell.isDisposed()) {
                        if (!display.readAndDispatch())
                            display.sleep();      
                }
                display.dispose();
        }
}

Sorceror,谢谢你的回答,我一定会关注this article。也许我会找到自己的方式。到目前为止,我已经改进了我的代码。首先,我设法摆脱灰色背景噪音。其次,我终于成功创建了按钮,就像我在第一时间看到的那样。然而,又出现了另一个障碍。当我删除图像(按钮)透明边框时,它发现按钮改变了它的模式(从按钮到复选框)。问题是我来得非常接近我正在寻找的东西,现在我有点困惑。如果你有时间,请看一下我的代码。

以下是代码,如果您启动它,您将看到问题所在(希望您在下载图像时没有问题):

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;

public class Main_page {
        public static void main(String[] args) {
                Display display = new Display();
                Shell shell = new Shell(display);
                Image image = new Image(display, "bg.gif"); // Launch on a screen 1280x1024
                shell.setBackgroundImage(image);
                shell.setBackgroundMode(SWT.TRANSPARENT);
                shell.setFullScreen(true);


                GridLayout gridLayout = new GridLayout();
                gridLayout.marginTop = 200; 
                gridLayout.marginLeft = 20;
                shell.setLayout(gridLayout);



                // If you replace SWT.PUSH with SWT.COLOR_TITLE_INACTIVE_BACKGROUND
                // you will see what I am looking for, despite nasty check box  

                Button button = new Button(shell, SWT.PUSH); 
                button.setImage(new Image(display, "moneyfast.gif"));



                shell.open();
                while (!shell.isDisposed()) {
                        if (!display.readAndDispatch())
                            display.sleep();      
                }
                display.dispose();
        }

3 个答案:

答案 0 :(得分:3)

如何摆脱按钮周围空间的唯一方法是设置背景Color或背景Image

button.setBackgroundImage(image);

但是,如果按钮不在左上角(就像现在一样),背景图像将无法正确定位。首先,你必须定位按钮,然后制作适当部分背景的图像,然后将其设置为按钮作为背景图像。

检查文章Taking a look at SWT Images - Transparency,了解Label(以及Button)透明度的其他详细信息。

答案 1 :(得分:1)

您还可以确保通过创建不会在任何平台中显示任何背景 带有图片的标签,用作标签的按钮和鼠标监听器。

答案 2 :(得分:0)

样式SWT.TRANSPARENT有助于:

    Button button = new Button(buttonParent,  SWT.TRANSPARENT);
    InputStream is = getClass().getResourceAsStream("my_image.png");
    ImageData imageData = new ImageData(is).scaledTo(16, 16);
    Image image = new Image (button.getDisplay(), imageData);
    button.setImage(image);