2012-10-21 21 views
13

我需要在我的Java Swing應用程序中使用自定義字體(ttf)。我如何將它們添加到我的包中並使用它們?將字體添加到Swing應用程序幷包含在包中

同時,我只是將它們安裝在窗口中,然後使用它們,但我不希望應用程序的使用情況如此複雜,因此不太方便告訴用戶在安裝字體之前用我的應用程序。

+0

這可能是重複的問題,請參見[這裏](http://stackoverflow.com/questions/5652344/how-can-i-use-a-custom-font-在-JAVA)。 – linski

+1

@DanM如果您因目前的回答不滿意而打開獎金,您應該澄清爲什麼它不能回答您的問題和/或您需要哪些其他信息。 – assylias

+0

[在Java中嵌入字體]可能的重複(http://stackoverflow.com/questions/4487871/embedding-a-font-in-java) –

回答

16

你可以通過InputStream加載它們:

InputStream is = MyClass.class.getResourceAsStream("TestFont.ttf"); 
Font font = Font.createFont(Font.TRUETYPE_FONT, is); 

此加載字體沒有預定義的字體設置,以便於使用,你必須做的:

Font sizedFont = font.deriveFont(12f); 
myLabel.setFont(sizedFont); 

參見:

Physical and Logical Fonts

+0

我需要把TestFont.ttf文件放在哪裏? – DanM

+0

對於上面的示例,它需要與類文件位於相同的位置。 – Reimeus

+1

或者如果它位於包中,則可以通過完整包名來訪問它。例如:我在包_foo.bar.master.cork_中有ttf文件_foo.ttf_,我可以通過getResourceAsStream(「/ foo/bar/master/cork/foo.ttf」)來訪問它。這意味着什麼:在開始時使用正斜槓,用正斜槓(文件名除外)替換每個點,並在路徑末尾有一個正斜槓,但在文件之前。** – TheBrenny

7

正如Reimeus所說,你可以使用一個InputStream。你也可以使用一個File

File font_file = new File("TestFont.ttf"); 
Font font = Font.createFont(Font.TRUETYPE_FONT, font_file); 

在這兩種情況下,你會把你的字體文件在任一項目的根目錄或一些子目錄。根目錄應該可能是你的程序運行的目錄。舉例來說,如果你有一個像目錄結構:

My_Program 
| 
|-Fonts 
| |-TestFont.ttf 
|-bin 
    |-prog.class 

,你會從My_Program目錄中java bin/prog運行程序。然後在您的代碼中,傳遞到InputStreamFile的文件路徑和名稱將爲"Fonts/TestFont.ttf"

0

試試這個:

@Override 
public Font getFont() { 
    try { 
     InputStream is = GUI.class.getResourceAsStream("TestFont.ttf"); 
     Font font = Font.createFont(Font.TRUETYPE_FONT, is); 
     return font; 
    } catch (FontFormatException | IOException ex) { 
     Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex); 
     return super.getFont(); 
    } 
} 
相關問題