如何处理Draw2D标签上的SWT字体集?

时间:2013-12-05 10:58:21

标签: java swt dispose eclipse-gef draw2d

在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 Widget。如何确保可以避免可怕的错误?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果您希望一次保留并重用所有资源(图像,字体,颜色等等)而不是使用注册表,请按照此窗口构建器类进行操作

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