2011-08-21 23 views
9

Czy istnieje sposób na uzyskanie domyślnej nazwy systemowej czcionki w języku Java? Domyślna czcionka może różnić się od os. Może to powodować problemy, jeśli używamy czcionki Arial, a jar działa w systemie Linux bez zainstalowanej czcionki Arial.Pobierz domyślną czcionkę systemową

Odpowiedz

9

JavaFX czyni to o wiele łatwiejsze:

import javafx.scene.text.Font; 

następnie użyć:

Font defaultFont = Font.getDefault(); 

lub

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

Aktualna i poprawna odpowiedź IMHO – Troyseph

+0

Czy istnieje sposób, aby to zrobić w Swing? –

+1

@CardinalSystem Polecam użycie nazwy, rozmiaru i wagi tej 'Font' JavaFX, aby utworzyć Swing' Font'. Jeśli nie podoba ci się ten smak, myślę, że odpowiedź Salvation jest dla Ciebie: https://stackoverflow.com/a/11592041/453435 – Supuhstar

5

Nie sądzę, że istnieje sposób na pobranie domyślnej czcionki systemowej (w Swing/AWT czcionka jest zwykle powiązana z bieżącym LAF i komponentem, na przykład), ale jeśli twoim problemem jest kompatybilność czcionek - możesz sprawdź używaną czcionkę względem wszystkich systemowych czcionek:

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

i dokonaj wyboru "przełączania awaryjnego", jeśli nie istnieje.

+0

+1 Patrz także [Pobieranie czcionki, rozmiar, pogrubienie, itp ...] (http://stackoverflow.com/questions/6965038/getting-fonts-sizes-bold-etc/6965149# 6965149). –

+1

W kwestii zawieszeń 'Font.canDisplayUpTo' jest bardzo przydatny do testowania, czy określone znaki będą działać - jeśli na przykład używasz czcionki języka CJK i potrzebujesz opcji rezerwowej, która obsługuje te języki. – misaka

4

Użyj zdefiniowane Font constants takich jak SERIF/SANS_SERIF itp

+4

nie o to chodziło w pytaniu o –

3

getFont() zwraca aktualną czcionkę, która jest (zwykle?) Domyślne. Zrobiłem to, aby zwiększyć rozmiar czcionki.

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

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

3

Obecnie używam tego, aby uzyskać domyślną czcionkę, chociaż wolałbym nie trzeba używać grafiki sprzeciwiają się dostać go:

 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

Spójrz na public static Font decode(String str) tutaj. Gdy metoda dekodowania otrzymuje wskaźnik zerowy jako parametr, zwraca czcionkę "Dialog", która jest zwykle czcionką systemową.

+0

nowa czcionka (Font.decode (null) .getName(), Font.BOLD, 14/* rozmiar * /); działa, dziękuje – Exceptyon

17

Spróbuj tego:

private final Font FONT = new JLabel().getFont(); 
Powiązane problemy