2011-08-21 21 views
9

¿Hay alguna forma de obtener el nombre de fuente predeterminado del sistema en Java? La fuente predeterminada puede diferir de os. Por lo tanto, puede crear problemas si usamos la fuente Arial y el archivo jar se ejecuta en Linux sin tener instalada la fuente Arial.Obtener fuente predeterminada del sistema

Respuesta

9

JavaFX hace esto mucho más fácil:

import javafx.scene.text.Font; 

a continuación, utilizar:

Font defaultFont = Font.getDefault(); 

o

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

La respuesta actualizada y correcta en mi humilde opinión – Troyseph

+0

¿Hay alguna manera de hacer esto en Swing? –

+1

@CardinalSystem Recomiendo usar el nombre, el tamaño y el peso de esta 'Fuente' de JavaFX para crear una 'Fuente' Swing. Si no le gusta el sabor de eso, entonces creo que la respuesta de Salvation es para usted: https://stackoverflow.com/a/11592041/453435 – Supuhstar

5

No creo que haya una manera de recuperar una fuente predeterminada del sistema (en Swing/AWT la fuente normalmente está asociada con la LAF y el componente actual, por ejemplo), pero si su preocupación es la compatibilidad de fuentes, podría comprobar la fuente que está utilizando en contra de todas las fuentes del sistema:

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

y hacer una elección "fail-over" si no existe.

+0

1 Véase también [fuentes, tamaños Obtención negrita, etc ...] (http://stackoverflow.com/questions/6965038/getting-fonts-sizes-bold-etc/6965149# 6965149). –

+1

En el tema de los fallos, 'Font.canDisplayUpTo' es muy útil para probar si los caracteres específicos funcionarán, por ejemplo, si está usando una fuente de lenguaje CJK y necesita una opción alternativa que admita esos idiomas. – misaka

4

Usa el definido Font constants como SERIF/SANS_SERIF etc.

+4

esa no es la pregunta acerca de –

3

getFont() devuelve la fuente actual, que es (por lo general?) El valor predeterminado. Hice esto para aumentar el tamaño de fuente.

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

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

3

Actualmente estoy usando esto para conseguir la fuente por defecto, aunque preferiría no tenga que utilizar un objeto gráfico para conseguirlo:

 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

Tome un vistazo a public static Font decode(String str) aquí. Cuando el método de decodificación recibe un puntero nulo como parámetro, devuelve la fuente "Diálogo" que suele ser la fuente del sistema.

+0

new Fuente (Font.decode (null) .getName(), Font.BOLD, 14/* tamaño * /); funciona, gracias – Exceptyon

17

Prueba esto:

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