2011-08-21 61 views
9

有什麼方法可以在Java中獲取系統默認字體名稱?默認字體可以不同於操作系統。因此,如果我們使用字體Arial並且在沒有安裝Arial字體的情況下在Linux中運行jar,它可能會造成麻煩。獲取系統默認字體

回答

9

的JavaFX使這是一個容易得多:

import javafx.scene.text.Font; 

然後使用:

Font defaultFont = Font.getDefault(); 

// Where 14 is the font size 
Font defaultFont = new Font(14); 
+1

最新和正確的答案恕我直言 – Troyseph

+0

有沒有辦法在Swing做到這一點? –

+1

@CardinalSystem我建議使用此JavaFX'Font'的名稱,大小和權重來創建Swing'Font'。如果你不喜歡這種味道,那麼我認爲救世的答案是給你的:https://stackoverflow.com/a/11592041/453435 – Supuhstar

5

我不認爲有一種檢索系統默認字體的方法(例如,在Swing/AWT中,字體通常與當前的LAF和組件相關聯),但是如果您關心的是字體兼容性 - 您可以檢查所用字體:

GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
Font[] allFonts = e.getAllFonts(); 

如果不存在,則進行「故障切換」選擇。

+0

+1參見[獲取字體,大小,粗體,...等(http://stackoverflow.com/questions/6965038/getting-fonts-sizes-bold-etc/6965149# 6965149)。 –

+1

關於故障轉移,「Font.canDisplayUpTo」對於測試特定字符是否有效非常有用 - 例如,如果您使用的是CJK語言字體並且需要支持這些語言的後備選項。 – misaka

4

使用定義Font constantsSERIF/SANS_SERIF

+4

這不是什麼問題關於 –

3

的getFont()返回當前字體,這是(通常是?)的默認。 我這樣做是爲了增加字體大小。

public MyTextArea(){ 
    Font currentFont = super.getFont(); 
    String fontName = currentFont.getFontName(); 
    int fontStyle = currentFont.getStyle(); 
    int fontSize = currentFont.getSize() + 4; 
    super.setFont(new Font(fontName, fontStyle, fontSize)); 
} 
+1

或:'Font currentFont = super.getFont(); if(currentFont!= null)super.setFont(currentFont.deriveFont(currentFont.getSize2D()+ 4));' – Supuhstar

3
我目前使用該工具來獲取默認的字體,但我寧願不需要使用圖形

對象獲得它:

 private final Font getFont() 
      { 
       Graphics g = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB).getGraphics(); 
       Font font = new Font(g.getFont().toString(), 0, 12); 
       g.dispose(); 

       return font; 
      } 
3

public static Font decode(String str)看看這裏。當decode方法收到一個空指針作爲參數時,它會返回通常爲系統字體的「Dialog」字體。

+0

new Font(Font.decode(null).getName(),Font.BOLD,14/* size * /);作品,謝謝 – Exceptyon

17

試試這個:

private final Font FONT = new JLabel().getFont();