簡體   English   中英

如何在swt java中處理Button的舊字體

[英]How to dispose the old font of a Button in swt java

我試圖定期更新按鈕的字體,這就是我實現它的方式。

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的org.eclipse.swt.SWT.error(SWT.java:4276)的org.eclipse.swt.SWT.error(SWT.java:4387)處理。 org.eclipse.swt.widgets.Display.error(Display.java:1258)的swt.SWT.error(SWT.java:4247)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異常的真正原因是no handle

嘗試在按鈕上使用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

    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM