【问题标题】:How to dispose of an SWT Font set on a Draw2D Label?如何处理在 Draw2D 标签上设置的 SWT 字体?
【发布时间】:2013-12-05 10:58:20
【问题描述】:

在 GEF 编辑器中,我有以下 EditPart

public class MyLabelEditPart extends AbstractGraphicalEditPart {

@Override
protected IFigure createFigure() {
    return new Label();
}

@Override
protected void refreshVisuals() {
    MyModel model = (MyModel) getModel();
    Label figure = (Label) getFigure();
    EditPart parent = getParent();

    Font font = new Font(Display.getCurrent(), "sansserif", 11, SWT.BOLD);
    figure.setFont(font);
    figure.setForegroundColor(ColorConstants.darkGray);
    figure.setText(model.getValueString());
    parent.refresh();
}

大多数型号都可以正常工作,但是 - 你已经发现了错误 - 我从不处理字体。因此,对于 10k+ 令牌的大型模型,这会引发 org.eclipse.swt.SWTError: No more handles。至少我认为(希望)这是导致错误的原因。

现在我不知道如何处理字体,因为 EditPart 的图形是 Draw2D 标签,而不是 SWT 小部件。如何确保可以规避可怕的错误?

【问题讨论】:

  • 所以您是在一遍又一遍地创建相同的字体,而不是创建static 并重复使用它?
  • 哎哟!谢谢指点!森林/树木...猜猜使用FontRegistry 将是另一种解决方案。

标签: java swt dispose eclipse-gef draw2d


【解决方案1】:

除了Baz' solution 使字体成为静态字段之外,一个好的解决方案是使用JFace FontRegistry,详见this strangeoptics blog post

【讨论】:

    【解决方案2】:

    如果您想一次性保留和重复使用所有资源(图像、字体、颜色等)而不是使用注册表,请遵循此 windows builder 类

    http://code.google.com/p/goclipse/source/browse/trunk/goclipse-n/src/org/eclipse/wb/swt/SWTResourceManager.java?r=445

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2011-09-06
      • 2015-12-02
      • 1970-01-01
      相关资源
      最近更新 更多