java - Mac 上的 SWT 图像按钮不起作用

标签 java eclipse image button swt

所以我有一个使用 SWT 的带有图像的按钮。 它的设计代码在这里:

final Button 按钮 = new Button(shell, SWT.FLAT | SWT.CENTER); 按钮.setBounds(54, 121, 109, 33); 按钮.setImage(SWTResourceManager.getImage(LoginDialog.class, "SignInButton.png"));

我想让图像占据整个按钮,没有边框,就像在 Windows 中一样。有谁知道如何实现这一点吗?

这是一张 ATM 的图片: enter image description here

本质上我只是想让白色部分消失。

最佳答案

好吧,如果您基本上想要绘制完全不同类型的按钮,Button 并不是最好的起点。但是,您可以使用this创建您自己的小部件。教程。我在这里写了一个例子:

public class ImageButton extends Composite
{
    private Color   textColor;
    private Image   image;
    private String  text;
    private int     width;
    private int     height;

    public ImageButton(Composite parent, int style)
    {
        super(parent, style);

        textColor = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);

        /* Add dispose listener for the image */
        addListener(SWT.Dispose, new Listener()
        {
            @Override
            public void handleEvent(Event arg0)
            {
                if (image != null)
                    image.dispose();
            }
        });

        /* Add custom paint listener that paints the stars */
        addListener(SWT.Paint, new Listener()
        {
            @Override
            public void handleEvent(Event e)
            {
                paintControl(e);
            }
        });

        /* Listen for click events */
        addListener(SWT.MouseDown, new Listener()
        {
            @Override
            public void handleEvent(Event arg0)
            {
                System.out.println("Click");
            }
        });
    }

    private void paintControl(Event event)
    {
        GC gc = event.gc;

        if (image != null)
        {
            gc.drawImage(image, 1, 1);
            Point textSize = gc.textExtent(text);
            gc.setForeground(textColor);
            gc.drawText(text, (width - textSize.x) / 2 + 1, (height - textSize.y) / 2 + 1, true);
        }
    }

    public void setImage(Image image)
    {
        this.image = new Image(Display.getDefault(), image, SWT.IMAGE_COPY);
        width = image.getBounds().width;
        height = image.getBounds().height;
        redraw();
    }

    public void setText(String text)
    {
        this.text = text;
        redraw();
    }

    @Override
    public Point computeSize(int wHint, int hHint, boolean changed)
    {
        int overallWidth = width;
        int overallHeight = height;

        /* Consider hints */
        if (wHint != SWT.DEFAULT && wHint < overallWidth)
            overallWidth = wHint;

        if (hHint != SWT.DEFAULT && hHint < overallHeight)
            overallHeight = hHint;

        /* Return computed dimensions plus border */
        return new Point(overallWidth + 2, overallHeight + 2);
    }

    public static void main(String[] args)
    {
        Display display = Display.getDefault();
        Shell shell = new Shell(display);
        shell.setLayout(new GridLayout(1, false));

        ImageButton button = new ImageButton(shell, SWT.NONE);
        button.setImage(new Image(display, "button.png"));
        button.setText("Button");

        shell.pack();
        shell.open();

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

看起来像这样:

enter image description here

<小时/>

当然,您必须处理不同的状态,例如按下悬停等。

关于java - Mac 上的 SWT 图像按钮不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23502556/

相关文章:

java - SQL中如何将&替换为&?

jquery - 当替换图像未加载时,img 元素上的错误(函数)导致无限循环

image - 如何为网页保存图像? (格式/尺寸)

java - Spring-Boot/H2 将数据库快照写入文件系统

java - 我正在创建 java api 来连接 kafka

java - SimpleNLG - 如何获得名词的复数形式?

Eclipse 计算代码行数

java - 使用 Java 1.5 编译 thrift 生成的类时出错

java - 删除Java项目,然后在同一目录中创建相同的项目 - Eclipse

image - 是否可以修改图像,让近视患者不戴眼镜也能看清楚?