25

I need to use a larger font for one of the labels.

label.setFont( new Font(display,"Arial", 14, SWT.BOLD ) );

but obviously Arial is not always the default font. I want to change just the size and keep everything else at default values.

Can I do something like

label.setFontSize( 14 );

to avoid setting the other parameters? Or can I at least find out the name of the font that is actually being used as default?

Tomas Andrle
  • 13,132
  • 15
  • 75
  • 92

2 Answers2

38

I believe you could do something like

FontData[] fD = label.getFont().getFontData();
fD[0].setHeight(16);
label.setFont( new Font(display,fD[0]));

As long as no more than one font is returned, that should work.

Mark K
  • 553
  • 4
  • 6
  • Be sure to dispose the new Font afterwards! See https://www.eclipse.org/articles/swt-design-2/swt-design-2.html – col.panic Nov 16 '20 at 09:16
33

You can do the following:

FontData[] fontData = label.getFont().getFontData();
for(int i = 0; i < fontData.length; ++i)
    fontData[i].setHeight(14);

final Font newFont = new Font(display, fontData);
label.setFont(newFont);

// Since you created the font, you must dispose it
label.addDisposeListener(new DisposeListener() {
    public void widgetDisposed(DisposeEvent e) {
        newFont.dispose();
    }
});
hudsonb
  • 2,214
  • 19
  • 20