如何在swt java中配置Button的旧字体

时间:2014-04-11 05:13:21

标签: java fonts swt

我试图定期更新按钮的字体,这就是我实现它的方式。

Font font = buttons.getFont();
FontData[] fontData = font.getFontData();
for(int j = 0; j < fontData.length; ++j) {
    fontData.setStyle(SWT.ITALIC | SWT.BOLD);
}
font = new Font(display, fontData);

buttons.setFont(font);

但这样做会使程序在一段时间后崩溃并出现异常

  

org.eclipse.swt.SWTError:没有更多句柄了     在org.eclipse.swt.SWT.error(SWT.java:4387)     在org.eclipse.swt.SWT.error(SWT.java:4276)     在org.eclipse.swt.SWT.error(SWT.java:4247)     在org.eclipse.swt.widgets.Display.error(Display.java:1258)     在org.eclipse.swt.widgets.Display.internal_new_GC(Display.java:2673)     在org.eclipse.swt.graphics.Device.computePoints(Device.java:241)     在org.eclipse.swt.graphics.Font.getFontData(Font.java:188)

我的猜测是我创建了很多字体对象而没有及时处理它们。但我不知道如何正确处理它们,任何人都可以帮助我吗?如果我猜错了,请告诉我no handle例外的真正原因是什么?

1 个答案:

答案 0 :(得分:1)

尝试在按钮上使用getFont()。dispose()和setFont(),

final Font arialFont = new Font(Display.getCurrent(), "Arial", 40,
        SWT.NORMAL);
final Font courierFont = new Font(Display.getCurrent(), "Courier New",
        8, SWT.NORMAL);
final Button btn = new Button(parent, SWT.NONE);
btn.setText("New Text");
btn.setSize(100, 30);
btn.setFont(arialFont);
Button changeBtn = new Button(parent, SWT.NONE);
changeBtn.setText("Change Font");
changeBtn.setSize(100, 30);
changeBtn.addSelectionListener(new SelectionListener() {

    @Override
    public void widgetSelected(SelectionEvent arg0) {
        count = count + 1;
        if (count % 2 == 0) {
            btn.getFont().dispose();
            btn.setFont(arialFont);
        } else {
            btn.getFont().dispose();
            btn.setFont(courierFont);
        }
    }

    @Override
    public void widgetDefaultSelected(SelectionEvent arg0) {
        // TODO Auto-generated method stub

    }
});