0

在 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 小部件。如何确保可以规避可怕的错误?

4

2 回答 2

2

除了Baz使字体成为静态字段的解决方案外,一个好的解决方案是使用 JFace FontRegistry,如这个奇怪的光学博客文章中所述。

于 2013-12-05T11:48:32.060 回答
0

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

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

于 2013-12-05T15:56:52.370 回答