es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Registro de error sobre fuente incorrecta al crear un JLabel en Mac

Cuando creo un nuevo JLabel, obtengo el siguiente registro de error en la consola:

Advertencia: las fuentes "Times" y "Times" no están disponibles para la fuente lógica Java "Serif", lo cual puede provocar una apariencia o un comportamiento inesperados. Vuelva a habilitar la fuente "Times" para eliminar esta advertencia.

Pero no uso esta fuente (por defecto).

¿Cómo puedo resolver este problema o al menos suprimir el mensaje?

StringBuilder sb = new StringBuilder();
// Aquí se añade algún texto a sb
// ...
JLabel label = new JLabel();
label.setFont(new Font("Classic Console Neue", Font.PLAIN, 18)); // se cambió la fuente por una fuente válida
label.setText(sb.toString()); // esta línea genera el registro en el log, ¿pero por qué?

Una solución temporal sería instalar el archivo Times.ttf en cada computadora de destino, pero eso no es práctico.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para resolver el problema, puedes usar el siguiente código para suprimir el mensaje de advertencia:

    System.setProperty("sun.awt.noerasebackground", "true");
    

    Este código desactivará el borrado del fondo, que es la causa del mensaje de advertencia.

    También puedes intentar usar una fuente diferente, como ya has hecho en el código que has proporcionado. Otra opción es usar una fuente personalizada cargándola desde un archivo, como se muestra a continuación:

    Font customFont = Font.createFont(Font.TRUETYPE_FONT, new File("ruta/al/archivo/font.ttf")).deriveFont(18f);
    GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(customFont);
    JLabel label = new JLabel();
    label.setFont(customFont);
    label.setText(sb.toString());
    

    Este código carga una fuente personalizada desde un archivo y la registra en GraphicsEnvironment para que pueda ser utilizada por JLabel.

Comments are closed.