如何在swt java中处理按钮的旧字体
我试图定期更新按钮的字体,这就是我实现它的方式如何在swt java中处理按钮的旧字体,java,fonts,swt,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);
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);
Font=buttons.getFont();
FontData[]FontData=font.getFontData();
对于(int j=0;j
但这样做会使程序在一段时间后崩溃,只有一个例外
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)
我猜我已经创建了很多字体对象,但没有及时处理它们。但我不知道如何正确处理它们,有人能帮我吗?如果我猜错了,请告诉我无句柄
异常的真正原因是什么?尝试使用按钮上的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
}
});
您的代码提醒我,如果我将这两种字体放在类的私有成员变量中,那么我只创建两种字体,我想我不需要处理它,因为只有两个对象。是吗?我想,不需要处理。您也可以尝试不使用dispose。@richard请记住,尽管您只使用了两个
Font
s,但最终您必须dispose()
它们。