Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT按钮,图像上有文本_Java_Image_Button_Text_Swt - Fatal编程技术网

Java SWT按钮,图像上有文本

Java SWT按钮,图像上有文本,java,image,button,text,swt,Java,Image,Button,Text,Swt,SWT不支持按钮中的“文本覆盖图像”。设置图像时,隐藏文本。实现这一目标的最佳方法是什么 我能想到的最好的解决办法是将文本与图像“合并”。。。有人知道一个好的Java库可以做到这一点吗 注意:我发现这个自定义实现只在图像上绘制文本:。为什么这不在SWT中实现??(无论如何,我不能让这个类工作……我真的不想要这种方法,因为我想要原生按钮的外观) 为什么这不在SWT中实现 SWT的目标是让自己看起来像本地人。为了实现这一点,SWT将操作系统资源用于小部件。因此,SWT按钮s看起来像操作系统按钮。图片

SWT不支持按钮中的“文本覆盖图像”。设置图像时,隐藏文本。实现这一目标的最佳方法是什么

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

注意:我发现这个自定义实现只在图像上绘制文本:。为什么这不在SWT中实现??(无论如何,我不能让这个类工作……我真的不想要这种方法,因为我想要原生按钮的外观)

为什么这不在SWT中实现

SWT的目标是让自己看起来像本地人。为了实现这一点,SWT将操作系统资源用于小部件。因此,SWT
按钮
s看起来像操作系统按钮。图片上方或下方带有文本的按钮并不常见

我成功地实现了某种工作,但它相当粗糙。也许你可以把它作为一个起点:

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
来实现按钮的大小调整,并使用
SWT的
Listener
来绘制图像和文本以填充按钮

结果如下所示:


谢谢您的回复。我的目标是在图像上实现文本(而不是上面或下面)。SWT实现没有理由不能支持此功能。如果SO可以本机显示图像,SWT可以“合并”图像上的文本…@marclopes您只需更改
drawText
drawImage
的坐标并颠倒顺序,即可在图像上显示文本。