2

GraphicsEnvironmentのgetAllFonts()メソッドがfc-listとは異なるフォントを返すのはなぜですか(Linuxの場合)。

fc-listは以下を返します:

Abyssinica SIL:style=Regular
Cantarell:style=Bold
Cantarell:style=Regular
Century Schoolbook L:style=Bold
Century Schoolbook L:style=Bold Italic
Century Schoolbook L:style=Italic
Century Schoolbook L:style=Roman
Courier:style=Regular
DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold,Bold
DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold Oblique,Bold Oblique
DejaVu Sans,DejaVu Sans Condensed:style=Condensed,Book
DejaVu Sans,DejaVu Sans Condensed:style=Condensed Oblique,Oblique
DejaVu Sans,DejaVu Sans Light:style=ExtraLight
DejaVu Sans Mono:style=Bold
DejaVu Sans Mono:style=Bold Oblique
DejaVu Sans Mono:style=Book
DejaVu Sans Mono:style=Oblique
DejaVu Sans:style=Bold
DejaVu Sans:style=Bold Oblique
DejaVu Sans:style=Book
DejaVu Sans:style=Oblique
DejaVu Serif,DejaVu Serif Condensed:style=Condensed Bold,Bold
DejaVu Serif,DejaVu Serif Condensed:style=Condensed Bold Italic,Bold Italic
DejaVu Serif,DejaVu Serif Condensed:style=Condensed,Book
DejaVu Serif,DejaVu Serif Condensed:style=Condensed Italic,Italic
DejaVu Serif:style=Bold
DejaVu Serif:style=Bold Italic
DejaVu Serif:style=Book
DejaVu Serif:style=Italic
Dingbats:style=Regular
...

一方

GraphicsEnvironmentのgetAllFontsは次を返します。

AbyssinicaSIL
CenturySchL-Bold
CenturySchL-BoldItal
CenturySchL-Ital
CenturySchL-Roma
DejaVuSans
DejaVuSans-Bold
DejaVuSans-BoldOblique
DejaVuSansCondensed
DejaVuSansCondensed-Bold
DejaVuSansCondensed-BoldOblique
DejaVuSansCondensed-Oblique
DejaVuSans-ExtraLight
DejaVuSansMono
DejaVuSansMono-Bold
DejaVuSansMono-BoldOblique
DejaVuSansMono-Oblique
DejaVuSans-Oblique
DejaVuSerif
DejaVuSerif-Bold
DejaVuSerif-BoldItalic
DejaVuSerifCondensed
DejaVuSerifCondensed-Bold
DejaVuSerifCondensed-BoldItalic
DejaVuSerifCondensed-Italic
DejaVuSerif-Italic
Dialog.bold
Dialog.bolditalic
Dialog.italic
Dialog.plain
DialogInput.bold
DialogInput.bolditalic
DialogInput.italic
DialogInput.plain
Dingbats
...

これらの2つの異なるリストを比較すると、ティーチリストには他のリストでは使用できないフォントがあります。

誰かが何が起こっているのか説明できますか?


さらに注意してください:

そもそもこれを尋ねた理由は、あるOS(Solarisなど)で定義されたフォントが別のOS(Linuxなど)で定義されているUIの問題を追跡しようとしているためです。

問題は、両方のOSが同じ論理フォント(ダイアログ)を持っている一方で、必ずしも同じ物理フォントを持っているとは限らないことだと思います。

しかし、次のようなフォントを作成する場合:

Font STANDARD_FONT = new Font("Dialog", 0, 12); 

どこでも同じであるとは限りません。

2つのシステムで使用可能なフォントを調べて、どちらがfc-listで使用できるかを確認できることを期待していましたが、java(Dialog.plain)によって報告されたフォントは、fc-listによるとリストされたフォントではありません。

したがって、新しいFont( "Dialog"、0、12)を介して論理フォントを定義すると、Javaを介して使用可能なAPI(font.getName()など)は次のように表示されます。

postscript-Dialog.plainファミリ-ダイアログ名-DialogfontName-Dialog.plainサイズ-12

Dialogファミリに使用するためにJavaが選択した物理フォントを正確に知るにはどうすればよいですか?

4

1 に答える 1

1

に排他的に存在するフォントファミリgetAllFonts()は物理フォントではありません。つまり、コンピュータ上のフォントファイルでfc-listはないため、それらを検索しません。これらはすべてのJava実装に共通のフォントファミリであり、物理フォントにマップされます。

論理フォントは、Javaプラットフォームで定義されている5つのフォントファミリであり、Javaランタイム環境でサポートされている必要があります。Serif、SansSerif、Monospaced、Dialog、DialogInputです。これらの論理フォントは実際のフォントライブラリではありません。代わりに、論理フォント名はJavaランタイム環境によって物理フォントにマップされます。

専用のフォントファミリについては、fc-list実行しているJava実装でサポートされていないシステム上の物理フォントである可能性があります。Java実装がサポートする必要がある唯一のフォントタイプはTrueTypeです。専用のフォントfc-listはTrueTypeではない可能性があります。

Javaプラットフォームのすべての実装は、TrueTypeフォントをサポートする必要があります。他のフォントテクノロジーのサポートは、実装に依存します。

出典:JavaのFontAPIドキュメント

于 2013-03-11T02:26:53.087 に答える