gpt4 book ai didi

图像上方带有文本的 Java SWT 按钮

转载 作者:行者123 更新时间:2023-11-30 06:28:14 26 4
gpt4 key购买 nike

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

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

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

最佳答案

Why is this not implemented in SWT?

SWT 的目标是看起来原生。为实现这一点,SWT 将 OS 资源用于小部件。因此,SWT Button 看起来像操作系统按钮。在图片上方或下方带有文本的按钮并不常见。

我设法实现了一些以某种方式起作用的东西,但它很老套。也许您可以将其用作起点:

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.Paint 使用了 Listener 来填充按钮图片和文字。

结果是这样的:

enter image description here

关于图像上方带有文本的 Java SWT 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12834367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com