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