FontDialogクラスは、ユーザにFontを決定してもらうためのダイアログです。 FontDialogクラスを使うと、対話的にフォントの決定ができます。
FontDialogクラスの使い方の流れは、


import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
public class FontingDrawCanvas extends Canvas {
public FontData fontData;
public String string;
public FontingDrawCanvas(Composite parent) {
super(parent, SWT.NONE);
addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
if (fontData != null && string != null) {
GC gc = e.gc;
// フォントの作成
Font font = new Font(Display.getCurrent(), fontData);
// フォントの設定
gc.setFont(font);
//文字列を描画
gc.drawText(string, 10, 10, true);
// フォントの有益な情報表示
FontMetrics fm = gc.getFontMetrics();
gc.drawText("平均の文字幅 = " + fm.getAverageCharWidth(),
10, 40, true);
gc.drawText("高さ = " + fm.getHeight(),
10, 70, true);
gc.drawText("文字間隔 = " + fm.getLeading(),
10, 100, true);
// フォントリソースの開放
font.dispose();
}
}
});
setSize(300, 300);
}
}
DemonstrateFontDialogクラスは、FontingDrawCanvasを呼び出すクラスです。
ボタンにSelectionListenerを登録して、ボタンが押されると、
FontDialogをオープンしてフォントをユーザから取得し、
取得したフォントをFontingDrawCanvasオブジェクトのfontDataフィールドに格納して、
redraw()メソッドを呼び出します。
この結果、FontingDrawCanvasオブジェクトの領域には、指定されたフォントで文字が描画されます。
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Shell;
public class DemonstrateFontDialog {
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
RowLayout layout = new RowLayout(SWT.VERTICAL);
shell.setLayout(layout);
final FontingDrawCanvas fontingDraw = new FontingDrawCanvas(shell);
fontingDraw.string = "きままにインデックスどう?";
fontingDraw.setLayoutData(new RowData(300, 300));
Button fontDialogTrigger = new Button(shell, SWT.PUSH);
fontDialogTrigger.setText("set font");
fontDialogTrigger.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
final FontDialog fd = new FontDialog(shell);
FontData fontData = fd.open();
fontingDraw.fontData = fontData;
fontingDraw.redraw();
}
});
fontDialogTrigger.pack();
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}