文字OVER图像的Java SWT按钮(Java SWT Button with text OVER

2019-09-23 23:13发布

SWT不支持“在图像文本”的按钮。 当图像设置,隐藏的文本。 有什么能实现这一目标的最佳方法?

我能想到的最好的解决方法是“合并”与图像的文字...没有人知道一个良好的Java库做这个?

注:我发现,简单地画在图像文本的自定义实施: https://github.com/jrobichaux/SquareButton/wiki 。 这是为什么没有在SWT实现的? (反正我不能让这个类的工作......我真的是因为我想要本机按钮的外观不希望这种做法)

Answer 1:

为什么这不是在SWT实现的?

SWT的目的是寻找本地。 要做到这一点,SWT使用OS资源的部件。 因此,SWT Button的神色像OS按钮。 文本上方或下方图片按钮并不是很常见。

我设法取得一些莫名其妙的作品,但它是相当哈克。 也许你可以使用它作为一个出发点:

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实现按键的大小和一个Listener用于SWT.Paint与图像和文本填写的按钮。

结果如下:



文章来源: Java SWT Button with text OVER image