2

SWT 不支持 Button 中的“Text over Image”。设置图像时,隐藏文本。实现这一目标的最佳方法是什么?

我能想到的最好的解决方法是将文本与图像“合并”……有人知道一个好的 Java 库可以做到这一点吗?

注意:我发现这个自定义实现只是在图像上绘制文本:https ://github.com/jrobichaux/SquareButton/wiki 。为什么这没有在 SWT 中实现?(无论如何,我无法让这门课正常工作......我真的不想要这种方法,因为我想要 NATIVE Button 外观)

4

1 回答 1

5

为什么这没有在 SWT 中实现?

SWT 旨在寻找本地人。为此,SWT 将操作系统资源用于小部件。因此,SWTButton看起来像 OS 按钮。在图像上方或下方带有文本的按钮并不常见。

我设法实现了某种可行的方法,但它很hacky。也许您可以将其用作起点:

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

    final Image image = display.getSystemImage(SWT.ICON_ERROR);
    final String text = "Button";

    final Button button = new Button(shell, SWT.PUSH);

    GridData data = new GridData();
    float fontHeight = shell.getFont().getFontData()[0].height;
    data.heightHint = image.getImageData().height + (int)fontHeight + 20;
    data.widthHint = 100;

    button.setLayoutData(data);

    button.addListener(SWT.Paint, new Listener() {

        @Override
        public void handleEvent(Event event) {
            GC gc = event.gc;

            int width = ((GridData)button.getLayoutData()).widthHint;
            int height = ((GridData)button.getLayoutData()).heightHint;
            Point textSize = gc.textExtent(text);

            gc.drawText(text, width / 2 - textSize.x / 2, image.getImageData().height - image.getImageData().height / 2 - textSize.y, true);
            gc.drawImage(image, width / 2 - image.getImageData().width / 2, height / 2 - image.getImageData().height / 2 + textSize.y / 2);
        }
    });

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

正如你所看到的,我曾经GridData实现按钮的大小和一个用图像和文本填充按钮的Listenerfor 。SWT.Paint

结果如下所示:

在此处输入图像描述

于 2012-10-11T09:43:09.367 回答