- PR -

自作アプリで独自フォントを使いたい

1
投稿者投稿内容
まさ
ベテラン
会議室デビュー日: 2002/11/15
投稿数: 74
投稿日時: 2004-11-22 16:06
まさです。

JDK 1.4 以上の Swing でアプリケーションを作ろうとしています。
手元に独自フォントの文字コードと、そのビットマップがあります。
(ビットマップは、*.bmp)

アプリケーション起動時にデフォルトで適用されるフォントの
拡張領域(?)に上記の独自フォントをマッピングし、
それをアプリケーション全体で使用したいのですが
このようなことは可能でしょうか?

1.独自フォントの作成はどのようにすればできるのか?
(font.properties をいじくらないで アプリケーション内部で作成したい。)

2.作成した独自フォントをアプリケーション全体に適用するには
どうしたらいい?(UI プロパティを調べて全部設定する?)
まさ
ベテラン
会議室デビュー日: 2002/11/15
投稿数: 74
投稿日時: 2004-11-25 20:46
まさです。

レスが…

引用:

1.独自フォントの作成はどのようにすればできるのか?
(font.properties をいじくらないで アプリケーション内部で作成したい。)

2.作成した独自フォントをアプリケーション全体に適用するには
どうしたらいい?(UI プロパティを調べて全部設定する?)



やっぱり、独自フォントを用意して
font.properties をいじくるのが普通なんでしょうか?

でもその場合って、
アプリケーションを配布するようなときには
フォントのインストールとか、font.properties の書き換えとかを
ユーザにやってもらわないとだめですよね?

作ったアプリで特定のフォントが使いたかったり、
独自の文字を出したい場合なんて場合、
みなさんどうしておられるのでしょうか?
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-11-26 00:32
まささん、こんにちは。

私もこの課題には大変興味があります。
私の場合は独自フォントというよりは、日本語と中国語の
フォントの組み合わせが欲しかったです。
勿論、font.propertiesを編集することなしに。

以前、既存の複数のフォントを合成するクラスを作りましたが、
全くうまく行きませんでした。グリフを返すメソッドさえ
通常の描画では呼び出されなかったのです。
そしてそれは挫折しました。

でも独自フォントが TrueTypeフォントのファイルなら、
Font.createFont(int fontFormat, InputStream fontStream)
が使えるかも知れませんよ。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-11-26 10:53
アプリケーションの初期化時に、UIManager#put()で、各Swingコンポーネ
ントのデフォルトのリソース指定を設定できますよ。

"MS Mincho"フォントがインストールされているマシンでお試しください。
或いは、フォント名をOSにインストールされている何れかのフォント名に変
更してもOKです。

コード:

import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.plaf.FontUIResource;
public class FontTest {
public static void main(String[] args) {
UIManager.put("Button.font",
new FontUIResource("MS Mincho",Font.BOLD,25));

JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new JButton("てすとだよ"));

f.pack();
f.show();
}
}



javax.swing.plaf.basic.BasicLookAndFeel#initComponentDefaults()
のソースコードを読めば、各コンポーネントにどんなフォントリソース(フォント
に限りませんが)がデフォルトで割り当てられているか、UIManagerの属性値の
キーが何なのかがわかります。

開発中のSwingアプリケーションが使用するLookAndFeelクラスに対して
initComponentDefaults()をオーバーライドし、親LookAndFeelと差分が発生
する属性だけまとめて上書き(UIDefaultsは、単なるHashtableですので、
上書きは簡単です)するようにすると、分離がしやすいので便利かもしれません。


[ メッセージ編集済み 編集者: シュン 編集日時 2004-11-26 11:02 ]
1

スキルアップ/キャリアアップ(JOB@IT)