2012-03-09 12 views
13

Ho un JButton e voglio aggiungere un'icona. Mi piacerebbe utilizzare le icone basate su font di FontAwesome che fornisce un file di font TrueType. L'icona che sto cercando di aggiungere è l'icona del pulsante di riproduzione. L'icona del pulsante di riproduzione nel file css di FontAwesome è \f04b che credo si traduca in \uf04b in Java.Aggiungi icone a JButton usando font personalizzati da AwesomeFont e caratteri unicode in Java Swing?

Ecco come sto caricando il font nel costruttore della classe base IconButton.

public class IconButton extends JButton { 
    public IconButton() { 
    try { 
     InputStream in = this.getClass().getResourceAsStream("/fontawesome-webfont.ttf"); 
     Font ttfBase = Font.createFont(Font.TRUETYPE_FONT, in); 
     Font ttfReal = ttfBase.deriveFont(Font.BOLD, 24); 
     setFont(ttfReal); 
    } catch (FontFormatException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

Nella classe di implementazione StartButton questo è il modo in cui sto impostando il testo.

public class StartButton extends IconButton { 
    public StartButton() { 
    setText(String.valueOf('\u0f4b')); 
    setForeground(Color.BLACK); 
    } 
} 

Questo è quello che ottengo. Niente.

JButton

Qualsiasi aiuto è molto apprezzato.

MODIFICA: vedere la risposta in basso.

+0

Quel primo Wold codice non compila ('createFont' tiri eccezioni che non sono né catturati, né dichiarati), e sembra un design terribile delle due classi mostrate (1. la prima classe potrebbe creare il Font una volta e metterlo in cache come un attributo statico 2. se definiva un costruttore basato su una stringa per il testo, chiamando il super costruttore, potrebbe avo id la seconda classe completamente). Alternativamente A. poiché 'IconButton' imposta un' Font' e 'StartButton' imposta un colore di primo piano, usa uno' JButton' standard e passa ciascuno a un metodo per configurare l'aspetto. B. Utilizzare un nuovo PLAF o regolare il 'UIManager' –

+0

Il codice non è stato estratto letteralmente dall'applicazione per ridurre il rumore, ma per completezza l'ho aggiornato per includere il try/catch. Vorrei anche aggiungere che sono d'accordo che dovrebbe creare solo il font una volta. Buon suggerimento Dovrò guardare in PLAF e UIManger. –

+0

* "Il codice non è stato estratto letteralmente dall'applicazione" * Probabilmente è meglio descriverlo in parole o pseudo-codice (chiaramente contrassegnato come tale) piuttosto che codice Java in quel caso. Buona chiamata per l'aggiornamento. :) –

risposta

12

Penso di averlo risolto davvero. Il carattere corretto è \uf04b non \u0f4b. Ops! :)

Questo funziona per me ora.

JButton with Play Icon

+2

Puoi e dovresti accettare le tue risposte! (C'era un post di blog su questo sul blog SO da qualche parte) – JavaAndCSharp

1

Prova jIconFont (Swing o JavaFX) a http://jiconfont.github.io/

Esempio:

Icon icon = IconFontSwing.buildIcon(FontAwesome.FLOPPY_O, 15); 

JButton button = new JButton(icon); 
+1

Si prega di non copiare e incollare la stessa risposta a più domande – Andy

+0

Le mie scuse. Come devo procedere quando la risposta a più domande è esattamente la stessa? –