2014-04-11 6 views
0

정기적으로 단추의 글꼴을 업데이트하려고하는데,이 방법을 구현하는 방법입니다. swt Java에서 Button의 이전 글꼴을 처리하는 방법

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: No more handles at org.eclipse.swt.SWT.error(SWT.java:4387) at org.eclipse.swt.SWT.error(SWT.java:4276) at org.eclipse.swt.SWT.error(SWT.java:4247) at org.eclipse.swt.widgets.Display.error(Display.java:1258) at org.eclipse.swt.widgets.Display.internal_new_GC(Display.java:2673) at org.eclipse.swt.graphics.Device.computePoints(Device.java:241) at org.eclipse.swt.graphics.Font.getFontData(Font.java:188)

함께 시간 후 추락했다. 하지만 나는 그들을 정확하게 처분하는 방법을 모른다. 아무도 나를 도와 줄 수 없을까? 내 추측이 잘못 되었다면, pl35는 no handle 예외의 진정한 이유가 무엇인지 말해 줍니까?

답변

1

내의 getFont를 사용하여 시도(). (폐기)하고 버튼의 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 

    } 
}); 
+0

코드가 생각 나게 그때 클래스의 private 멤버 변수에이 두 폰트를 넣어 있다면 해당 두 개의 글꼴을 만들면 단 두 개의 개체 만 있으므로이 글꼴을 삭제할 필요가 없습니다. 그게 맞습니까? – richard

+0

처분은 필요하지 않습니다. 처분하지 않고도 시도 할 수 있습니다. – AJJ

+0

괜찮습니다. 고맙습니다. 닫으십시오. – richard

관련 문제