[J2SE] Un*x中Swing GUI中文亂碼解決方法
換過作業系統後還沒有想到在Swing上顯示中文會有問題
只是因為幫別人寫一個小程式,今天就好死不死被我遇見了XD
尋求解決同時搜了一下版,不過似乎版上很少人討論到這東西…
於是研究過後把我的經驗貼出來分享給大家@@
環境:
$ uname -ai
FreeBSD CS329.dorm8.nctu.edu.tw 8.0-RELEASE-p2 FreeBSD 8.0-RELEASE-p2 #6: Fri
Feb 12 01:37:32 CST 2010 root@:/usr/obj/usr/src/sys/TONYBSD i386 TONYBSD
$ pkg_info | grep jdk
diablo-jdk-1.6.0.07.02_8 Java Development Kit 1.6.0_07.02
遇到問題:
Swing上除了Banner之外,其餘中文顯示出現問題
方法:
$ cd <JavaHome>/jre/lib/fonts/
JavaHome 是各位jdk的安裝路徑,我這裡是/usr/local/diablo-jdk1.6.0
$ mkdir fallback
此資料夾代表存放擴充字型的地方
接下來就是把想要的字型,看是用複製的或是symbolic link,方到fallback目錄下
這時可以運用find /usr/local -name *.ttf 來尋找
以下拿我的當例子
$ find /usr/local -name "*.ttf"
發現/usr/local/lib/X11/fonts有很多字型
其中有一個資料夾叫TTF裡面有個"文鼎PL中楷",這是我要的
$ cd /usr/local/lib/X11/fonts/TTF
$ ln -s *.ttf /usr/local/diablo-jdk1.6.0/jre/lib/fonts/fallback/
這樣就完成了,之後只要在main的開頭加上以下程式碼(或寫在constructor),凡是SwingGUI(JLabel, FileChooser...etc)從此就都能正常顯示中文了,祝各位使用愉快^^:
Font f = new Font("文鼎PL中楷",Font.PLAIN,12);
UIManager.put("Label.font",f);
UIManager.put("Label.foreground",Color.black);
UIManager.put("Button.font",f);
UIManager.put("Menu.font",f);
UIManager.put("MenuItem.font",f);
UIManager.put("List.font",f);
UIManager.put("CheckBox.font",f);
UIManager.put("RadioButton.font",f);
UIManager.put("ComboBox.font",f);
UIManager.put("TextArea.font",f);
UIManager.put("EditorPane.font",f);
UIManager.put("ScrollPane.font",f);
UIManager.put("ToolTip.font",f);
UIManager.put("TextField.font",f);
UIManager.put("TableHeader.font",f);
UIManager.put("Table.font",f);
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.242.246
→
03/31 22:56, , 1F
03/31 22:56, 1F
→
03/31 23:16, , 2F
03/31 23:16, 2F
→
03/31 23:28, , 3F
03/31 23:28, 3F
→
03/31 23:29, , 4F
03/31 23:29, 4F
→
03/31 23:29, , 5F
03/31 23:29, 5F
※ 編輯: tonytonyjan 來自: 140.113.242.246 (03/31 23:37)
→
04/01 19:55, , 6F
04/01 19:55, 6F
討論串 (同標題文章)