2013-03-11 88 views
2

爲什麼GraphicsEnvironment中的getAllFonts()方法返回不同的字體 比fc-list的爲什麼GraphicsEnvironment的getAllFonts()返回與fc-list不同的字體?

fc-list的回報(在Linux上):

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 
... 

getAllFonts在GraphicsEnvironment中返回:

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 
... 

比較這兩個不同的列表,示教列表中的字體不可用到另一個。

任何人都可以解釋發生了什麼?


此外應注意:

我問這個擺在首位的原因是,我試圖追查其中的字體在一個操作系統中定義了一些UI問題(如Solaris)上比上不同另一個(例如Linux)。

我認爲問題是,雖然兩個操作系統具有相同的邏輯字體(對話框), 它們不一定具有相同的物理字體。

但是,如果你的字體,如:

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

它不能保證是相同的無處不在。

我希望我可以看看兩個系統上可用的字體,並查看哪些可通過fc-list獲得,但java(Dialog.plain)報告的字體不是根據fc-list列出的字體。

所以,如果我通過定義新的字體( 「對話」,0,12)邏輯字體, 通過Java可用的API(如font.getName()等)顯示:

後記 - 對話。平原 家庭 - 對話 名字 - 對話 的fontName - Dialog.plain 大小 - 12

我怎麼能知道什麼物理字體Java已經選擇使用該對話框家庭?

回答

1

getAllFonts()專用的字體系列不是物理字體,這意味着它們不是計算機上的字體文件,所以fc-list找不到它們。它們是每個Java實現中常見的字體系列,並映射到物理字體。

邏輯字體是由Java平臺必須由Java運行時環境的支持所定義的五種字體系列:襯線,無襯線,等寬,對話,和DialogInput。這些邏輯字體不是實際的字體庫。相反,邏輯字體名稱由Java運行時環境映射到物理字體。

至於fc-list專用的字體系列,它們很可能是系統中的物理字體,它們不受所運行的Java實現支持。Java實現需要支持的唯一字體類型是TrueType; fc-list專用的字體可能不是TrueType。

Java平臺的所有實現都必須支持TrueType字體;對其他字體技術的支持依賴於實現。

來源:Java's Font API documentation

+0

感謝澄清瓦肯。我在上面添加了一些筆記,以瞭解我看到的和我看不到的東西, – 2013-03-11 03:41:13

+0

要發現每個邏輯字體映射到的內容,您需要閱讀[Java的字體配置文件](http://docs.oracle.com/javase /7/docs/technotes/guides/intl/fontconfig.html)。 – Vulcan 2013-03-11 03:49:32

+0

似乎有點難看,因爲沒有辦法確定它正在選擇哪個屬性文件。我基於java api指南做出了一個很好的猜測,但是如果有一個API會打印它選擇的物理字體的名稱,它會更好。感謝偉大的信息瓦肯,非常明確的建議。 – 2013-03-11 20:40:51

相關問題