2011-08-21 12 views
9

C'è un modo per ottenere il nome del font predefinito di sistema in Java? Il carattere predefinito può differire da os. Quindi può creare problemi se usiamo il font Arial e il jar è in esecuzione in Linux senza avere il font Arial installato.Ottieni il font predefinito di sistema

risposta

9

JavaFX rende molto più facile:

import javafx.scene.text.Font; 

quindi utilizzare:

Font defaultFont = Font.getDefault(); 

o

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

La risposta aggiornata e corretta IMHO – Troyseph

+0

C'è un modo per farlo in Swing? –

+1

@CardinalSystem Si consiglia di utilizzare il nome, la dimensione e il peso di questo 'Font' di JavaFX per creare un carattere 'di swing. Se non ti piace il gusto di ciò, allora penso che la risposta di Salvation sia per te: https://stackoverflow.com/a/11592041/453435 – Supuhstar

5

Non penso che ci sia un modo per recuperare un font predefinito di sistema (in Swing/AWT il font è normalmente associato al LAF e al componente attuali, ad esempio), ma se la tua preoccupazione è la compatibilità dei font, potresti verificare il tipo di carattere che si sta utilizzando contro tutti i font di sistema:

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

e fare una scelta "fail-over" se non esiste.

+0

1 Vedi anche [font Come, dimensioni, grassetto, ecc ...] (http://stackoverflow.com/questions/6965038/getting-fonts-sizes-bold-etc/6965149# 6.965.149). –

+1

In tema di failover, 'Font.canDisplayUpTo' è molto utile per verificare se determinati caratteri funzioneranno, ad esempio se si utilizza un font di linguaggio CJK e se è necessaria un'opzione di fallback che supporti tali lingue. – misaka

4

Utilizzare il definito Font constants come SERIF/SANS_SERIF ecc

+4

non è quello che la domanda era circa –

3

GETFONT() restituisce il font corrente, che è (di solito?) Il default. Ho fatto questo per aumentare la dimensione del carattere.

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

Attualmente sto usando questo per ottenere il carattere predefinito, anche se avrei preferito non essere necessario utilizzare un oggetto Graphics per farlo:

 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

Date un'occhiata a public static Font decode(String str) qui. Quando il metodo di decodifica riceve un puntatore nullo come parametro, restituisce il carattere "Dialog" che di solito è il carattere di sistema.

+0

nuovo Font (Font.decode (null) .getName(), Font.BOLD, 14/* size * /); funziona, grazie – Exceptyon

17

Prova questo:

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