Fontクラスのオブジェクトは、オペレーティングシステム上のフォントリソースを表します。 Fontクラスには、3つのコンストラクタが用意されています。
Font(Device device, FontData fd) Font(Device device, FontData[] fds) Font(Device device, String name, int height, int style)3番目のコンストラクタは、name、height、styleの引数で、直接フォントの情報を指定してフォントを作成します。 1番目のコンストラクタは、あらかじめFontDataで作成されたフォント情報を使ってフォントを作成します。 2番目のコンストラクタは、複数のFontDataオブジェクトを指定することで、 異なった環境でも、該当するフォント情報を採用してフォントを作成することができます。
フォントの最も簡単な使い方は、ControlクラスのsetFont(Font)メソッドでフォントを指定することです。
これによってフォントを指定したら、次回以降のそのControlオブジェクトへのsetText(String)メソッドの呼び出しで設定された文字列は、
指定されているフォントによって描画されます。
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
public class FontDataTest {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
Label label = new Label(shell, SWT.NONE);
label.setText("BOLDING FONT");
// フォントの作成と指定
FontData fontData = new FontData("MS ゴシック", 20, SWT.BOLD);
Font font = new Font(display, fontData);
label.setFont(font);
label.pack();
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
// フォントリソースの開放
font.dispose();
display.dispose();
}
}
フォントをGCオブジェクトに指定することで、 GCオブジェクトで提供する、文字列描画メソッドの描画する文字列のフォントを変更することができます (GCによる文字列描画についてはこちらで紹介しました)。
方法は、Controlオブジェクトに対してフォントを指定するのと同じで、 GC#setFont(Font)メソッドを使用します。
フォントを設定したら、その後GC#getFontMetricsメソッドで、FontMetricsオブジェクトを取得することができます。 このオブジェクトから、現在GCに指定されているフォントの高さや平均の横幅、ピッチ幅等を取得することができます。
さらに、フォントの選択は、Color選択用に用意されていたColorSelectorと同じように、 フォントをユーザが選択するためのFontDialogクラスが用意されています。
JFace APIでは、Fontオブジェクトの作成(コンストラクト)と開放(dispose)を行う手間を省くために、 FontRegistryクラスを提供しています。
FontRegistryオブジェクトには、FontDataを登録できます。 登録は、FontRegistry#put(String symbolicName, FontData[] fontData)にて登録します。 登録したFontDataは、すべてFontRegistryが保持します。
Fontオブジェクトがほしくなったときに、FontRegistry#get(String symbolicName)メソッドで、Fontオブジェクトを取得することができます。 その際、FontRegistryオブジェクトが、登録してあるFontDataからFontオブジェクトを作成します。 作成されたFontオブジェクトは、コンストラクタに指定されたDisplayオブジェクトがdisposeされるときにいっしょにdisposeされます。 symbolicName引数に指定する値は、登録したものを取得するときに使用します。
登録する際、FontDataの配列を指定するのは、複数のオペレーティングシステム環境に対応するためです。 実際にgetメソッドでFontオブジェクトを取得するときには、登録したFontData配列の最初に対応しているフォントが取得できます。
専らコンストラクタは
FontRegistry(Display display)を使います。 使い方は、javadoc_Eclipse_Platform_APIを参照すればわかると思います。