2012-03-09 29 views
13

Tengo un JButton y deseo agregarle un ícono. Me gustaría usar los iconos basados ​​en fuentes de FontAwesome que proporciona un archivo de fuentes TrueType. El ícono que intento agregar es el ícono del botón reproducir. El ícono de botón de reproducción en el archivo css de FontAwesome es \f04b y creo que se traduce en \uf04b en Java.¿Agregar iconos a JButton usando una fuente personalizada de AwesomeFont y caracteres Unicode en Java Swing?

Así es como estoy cargando la fuente en el constructor de la clase 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(); 
    } 
    } 
} 

En la clase de implementación StartButton, así es como estoy configurando el texto.

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

Esto es lo que obtengo. Nada.

JButton

Cualquier ayuda es muy apreciada.

EDITAR: Consulte la respuesta a continuación.

+0

Ese primer Wold código se compila ('createFont' tiros excepciones que ni se capturan ni declaradas), y parece un diseño terrible de las dos clases mostradas (1. la primera clase podría crear la Fuente una vez y almacenarla como un atributo estático 2. si definiera un constructor basado en una Cadena para el texto, llamando al super constructor, podría avo id la segunda clase por completo). Alternativamente, como 'IconButton' establece' Font' y 'StartButton' establece un color de primer plano, use un' JButton' estándar y entregue cada uno a un método para configurar el aspecto. B. Use un nuevo PLAF o ajuste el 'UIManager' –

+0

El código no fue extraído palabra por palabra de la aplicación para reducir el ruido, pero, para completar, lo he actualizado para incluir el try/catch. También agregaría que acepto que solo debería crear la fuente una vez. Buena sugerencia. Tendré que buscar en PLAF y UIManger. –

+0

* "El código no fue extraído palabra por palabra de la aplicación" * Probablemente sea mejor describirlo en palabras o seudocódigo (claramente marcado como tal) en lugar de código Java en ese caso. Buena llamada para actualizarlo. :) –

Respuesta

12

Creo que he resuelto esto en realidad. El caracter correcto es \uf04b no \u0f4b. ¡Ups! :)

Esto está trabajando para mí ahora.

JButton with Play Icon

+2

¡Puedes y deberías aceptar tus propias respuestas! (Hubo una publicación en el blog sobre esto en el blog de SO en algún lugar) – JavaAndCSharp

1

Trate jIconFont (Swing o JavaFX) en http://jiconfont.github.io/

Ejemplo:

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

JButton button = new JButton(icon); 
+1

No copie y pegue la misma respuesta exacta a varias preguntas – Andy

+0

Mis disculpas. ¿Cómo debo proceder cuando la respuesta a varias preguntas es exactamente la misma? –

Cuestiones relacionadas