【问题标题】:Java SWT: show paintings in tooltipJava SWT:在工具提示中显示绘画
【发布时间】:2015-03-10 15:11:10
【问题描述】:

我想在 Java SWT 中为 StyledText 设置工具提示。这个想法是显示鼠标点击的文本信息。到目前为止,我只能在工具提示中显示文本,但我希望整个工具提示是一个图像,它是使用 SWT 中的绘图方法绘制的,以显示信息中的一些结构。似乎 Tooltip 无法处理,所以任何人都可以建议我如何做到这一点,或者我可以使用哪个小部件来实现它?

编辑:如何设置createToolTipContentArea 返回的合成的大小?

protected Composite createToolTipContentArea(Event event, Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.addPaintListener(new SPPaintListener());
composite.setSize(680, 600);

return composite;
}
private class SPPaintListener implements PaintListener {

public void paintControl(PaintEvent e) {

  drawLyrics(e);
  e.gc.dispose();
}
}

private void drawLyrics(PaintEvent e) {
e.gc.setAntialias(SWT.ON);

Font font = new Font(e.display, "Purisa", 10, SWT.NORMAL);
Color color = new Color(e.display, 25, 25, 25);

e.gc.setForeground(color);
e.gc.setFont(font);

e.gc.drawText("em so transitory", 20, 30);
e.gc.drawText("em so transitory", 180, 30);
e.gc.drawText("Theermanent one", 20, 60);
e.gc.drawText("Theermanent one", 180, 60);

e.gc.drawLine(10, 30, 15, 30);

font.dispose();
}

就像说的那样,我需要一些复合材料上的画,但它们不会完全显示出来。

【问题讨论】:

  • 如果您不局限于 SWT,JFace ToolTip 类可以做到这一点。

标签: java image swt tooltip


【解决方案1】:

您可以使用派生自org.eclipse.jface.window.ToolTip 的类在工具提示中绘制您喜欢的任何内容。

public class MyToolTip extends ToolTip
{
  public MyToolTip(Control control)
  {
    super(control, NO_RECREATE, false);
  }

  @Override
  protected Composite createToolTipContentArea(final Event event, final Composite parent)
  {
    // TODO add your controls here
  }
}

用于:

new MyToolTip(control);

其中control 是应该有工具提示的控件。

我展示了最简单的形式,其中工具提示区域对于整个控件都是相同的。您还可以覆盖getToolTipArea 方法以根据控件中的位置更改工具提示。

对于图像,createToolTopArea 可能如下所示:

@Override
protected Composite createToolTipContentArea(final Event event, final Composite parent)
{
  Composite body = new Composite(parent, SWT.NONE);

  body.setLayout(new GridLayout());

  Label label = new Label(body, SWT.LEAD);

  Image image = ... your image

  label.setImage(image);

  return body;
}

【讨论】:

  • 嗨,格雷格,感谢您的回答,这应该符合我的要求,但只有一个问题:如何设置工具提示的大小?我试过了,似乎大小是根据它显示的文本自动计算的。但是我需要显示一个带有绘图的合成,我只能显示它的一部分。
  • 我已经添加了一个带有示例的示例,改编自我使用的代码
  • 是的,我已经使用过了,但我仍然无法设置合成的大小。查看我更新的帖子。
  • 我没有尝试过这样的事情。你可能想要一个主 Composite 的子 Canvas。在主复合体上使用 GridLayout,您可以将 GridData 用于子级的 LayoutData,并且可以指定 widthHint 和 heightHint 值。
猜你喜欢
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多