Альтернативой может быть добавление DisposeListener
, в котором содержится список шрифтов, которые необходимо удалить после завершения, например,
class FontDisposer implements DisposeListener {
private List<Font> toDispose;
public FontDisposer() {
toDispose = new ArrayList<Font>();
}
@Override
public void widgetDisposed(DisposeEvent e) {
// Dispose all fonts in toDispose
}
public void registerFont(Font f) {
toDispose.add(f);
}
}
class UIWotsit extends SomeUIClass {
private FontDisposer disposer;
public UIWotsit() {
disposer = new FontDisposer();
addDisposeListener(disposer);
}
public void changeFont(Font f) {
disposer.registerFont(f);
// Do all the font changing stuff
}
}
Это может не подходить для вашего конкретного приложения, но, вероятно, разумно начать с чего-то, что поддерживает список шрифтов. Вы также можете использовать анонимный DisposeListener, который вызывает метод в любом коде, который управляет созданием / изменением / удалением шрифта:
class OtherFontDisposer implements DisposeListener {
@Override
public void widgetDisposed(DisposeEvent e) {
myCleverFontManager.disposeOfAll();
}
}
Все зависит от того, создаете ли вы новые метки или нет, и хотите ли вы избавляться от шрифтов немедленно или только при утилизации пользовательского интерфейса.