Keywords: JDK1.2, Swing, TrueType Fonts, Chinese Location, ttmkfdir
JDK1.2 Swing采用TrueType 字體作為顯示字體,而目前大多數UNIX操作系統還不支持中文TrueType字體,所以顯示到中文時就變成了小方塊。本文講解如何使得中文在Swing 中正常顯示。
1。中文字體的獲得
中文TrueType字體是容易獲得的,如在Windows操作系統中缺省提供的幾種,或市面上的方正,文鼎等。購買後拷貝至Unix平台上即可。
2。讓Java引用指明的中文字體
在JRE 的fonts.propertie中指明了Java 運行時字體的來源,在Windows 環境下,字體名形如:Courier New,ANSI_CHARSET,而在Unix下,字體名則為:adobe-times-medium-r-normal--*-%d-*-*-*-*-iso8859-1。所以,即便是同樣的字體,在font.properties中的寫法也是不一樣的。Unix下,關於一個TrueType字體文件中包含了幾種字體類型, 是通過字體所在目錄中fonts.dir文件指明的。以下是fonts.dir示例:
4
SIMSUN.TTF -misc-SimSun-medium-r-normal--0-0-0-0-p-0-ascii-0
SIMSUN.TTF -misc-SimSun-medium-r-normal--0-0-0-0-p-0-fcd8859-15
SIMSUN.TTF -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-15
SIMSUN.TTF -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-1
開頭的4指明在這個目錄中有4種字體,都存放於SimSun.TTF(宋體)文件中。關於fonts.dir的生成,在http://WWW.joerg-pommnitz.dE/TrueType/ttmkfdir.tar.gz 提供了一個工具 ttmkfdir, 在字體所在目錄運行即可。這個工具需要perl 5 和 freetype 1.1,Perl 5一般在Unix平台上都有,freetype1.1在ftp://sunsite.unc.edu/pub/Linux/X11/fonts/freetype-1.1.tar.gz 。再舉例幾個常用的字體文件名:
SimYou.ttf -ZHUHAI Stone-YouYuan-medium-r-normal--0-0-0-0-m-0-ascii-0 (幼圓)
SimLi.ttf -ZHUHAI Stone-LiSu-medium-r-normal--0-0-0-0-m-0-ascii-0(隸書)
SIMKAI.TTF -misc-KaiTi_GB2312-medium-r-normal--0-0-0-0-p-0-ascii-0(楷體)
SIMHEI.TTF -misc-SimHei-medium-r-normal--0-0-0-0-p-0-ascii-0 (黑體)
SIMFANG.TTF -misc-FangSong_GB2312-medium-r-normal--0-0-0-0-p-0-ascii-0 (仿宋)
接下來修改font.properites文件(如果有相應的中文字體配置文件就更好,替換掉其中非TrueType中文字體,像在HP-UX上就有font.properties.zh_CN,再覆蓋font.properties文件),可以定位其中一種字體名,用上面的中文字體名替換,下面是在HP-UX上修改後的fonts.properties部分示例:
serif.plain.0=-adobe-times-medium-r-normal--*-%d-*-*-*-*-iso8859-1
serif.plain.1=-misc-SimSun-medium-r-normal--*-%d-*-*-p-*-iso8859-15
serif.plain.2=-adobe-symbol-medium-r-normal--*-%d-*-*-p-*-adobe-fontspecific
serif.plain.3=-adobe-symbol-medium-r-normal--*-%d-*-*-p-*-adobe-fontspecific
#serif.italic.0=-agfa-cgtimes-medium-i-normal--*-%d-*-*-p-*-iso8859-1
serif.italic.0=-adobe-times-medium-i-normal--*-%d-*-*-*-*-iso8859-1
serif.italic.1=-misc-SimSun-medium-r-normal--*-%d-*-*-p-*-iso8859-15
serif.italic.2=-adobe-symbol-medium-r-normal--*-%d-*-*-p-*-adobe-fontspecific
serif.italic.3=-adobe-symbol-medium-r-normal--*-%d-*-*-p-*-adobe-fontspecific
#serif.bold.0=-agfa-cgtimes-bold-r-normal--*-%d-*-*-p-*-iso8859-1
serif.bold.0=-adobe-times-bold-r-normal--*-%d-*-*-*-*-iso8859-1
serif.bold.1=-misc-SimSun-medium-r-normal--*-%d-*-*-p-*-iso8859-15
serif.bold.2=-adobe-symbol-medium-r-normal--*-%d-*-*-p-*-adobe-fontspecific
serif.bold.3=-adobe-symbol-medium-r-normal--*-%d-*-*-p-*-adobe-fontspecific
。。。
注意字體文件中的-misc-SimSun-medium-r-normal--0-0-0-0-p-0-fcd8859-15在寫入font.properties時被改為上面的-misc-SimSun-medium-r-normal--*-%d-*-*-p-*-iso8859-15,以實現TrueType字體的平滑縮放。
運行Java應用程序時,設置環境變量JAVA_FONTS為中文TrueType字體所在目錄,如:
export JAVA_FONTS=/usr/lib/X11/fonts/ttfdir
這樣,Swing 的中文顯示就正常了。
朱葉峰([email protected])
-------------
於國信朗訊