<更新記録>
2007年 12月 18日
執筆

姉妹サイト検索 Web検索


FontDialog

FontDialog

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

FontDialogクラスの使い方の流れは、

  • 1,setRGB()メソッドによって、フォントのデフォルト色を決めておく。
  • 2,setFontList(FontData[])メソッドによって、デフォルトのフォント名を決めておく。
  • 3,open()メソッドによってダイアログを表示し、ユーザが指定したフォントを戻り値として受け取る。
  • 4,受け取ったフォントを使用する。
以上のようになります。 今回のサンプルでは、極力簡単に理解するために、このうち3と4のステップのみを行っています。

FontingDrawCanvasクラスは、設定されたstringフィールドの文字列を、自身の領域に描画するクラスです。 描画するフォントは、fontDataフィールドに設定されているフォントを使用します。
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();
	}
}


FontData / <戻る> / <ページ先頭> / JFaceResources
Powered by VeryEasyCMS