Acabo de comenzar a portar mi aplicación Swing de OS X a Windows y las cosas son dolorosas con JLabel
s.El texto html de JLabel ignora setFont
He notado que la fuente especificada en setFont
se ignora si el texto de la etiqueta es HTML (esto no ocurre en la Mac). El formato HTML es EXTREMADAMENTE útil para la legibilidad en pantallas complicadas.
En circunstancias normales, especifico la fuente en una etiqueta HTML, pero la fuente que uso se carga en tiempo de ejecución usando Font.createFont
con un ttf fuera del JAR. Intenté usar el nombre de la fuente cargada en la etiqueta de la fuente, pero eso no funcionó.
¿Hay alguna manera de que pueda usar un awt.Font
cargado con un html-ified JLabel
en Windows?
Aquí hay un ejemplo. No puedo compartir la fuente de mi solicitud, pero sólo se acabó con éste (una TTF puro), y el mismo comportamiento que ocurre:
http://www.dafont.com/sophomore-yearbook.font
import java.awt.Font;
import java.io.File;
import javax.swing.*;
public class LabelTestFrame extends JFrame {
public LabelTestFrame() throws Exception {
boolean useHtml = true;
String fontPath = "C:\\test\\test_font.ttf";
JLabel testLabel = new JLabel();
Font testFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontPath)).deriveFont(18f);
testLabel.setFont(testFont);
if (useHtml) testLabel.setText("<html>Some HTML'd text</html>");
else testLabel.setText("Some plaintext");
getContentPane().add(testLabel);
setSize(300,300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {new LabelTestFrame().setVisible(true);}
catch (Exception e) {e.printStackTrace();}
}
});
}
}
EDIT: curiosamente, si uso una de los ttf de la carpeta lib/fonts de JRE (en este caso una de las fuentes Lucida aquí renombradas como test_java.ttf) este fragmento produce resultados idénticos con el booleano activado y desactivado.
public LabelTestFrame() throws Exception {
boolean useHtml = false;
String fontPath = "C:\\test\\test_java.ttf";
JLabel testLabel = new JLabel();
Font testFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontPath)).deriveFont(18f);
testLabel.setFont(testFont);
if (useHtml) testLabel.setText("<html><b>Some HTML'd text</b></html>");
else testLabel.setText("Some plaintext");
getContentPane().add(testLabel);
setSize(300,300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {new LabelTestFrame().setVisible(true);}
catch (Exception e) {e.printStackTrace();}
}
});
}
EDIT 2: El método descrito aquí para establecer la fuente predeterminada JLabel tiene exactamente el mismo problema (texto sin muestra fina, texto html'd no lo hace): Changing default JLabel font
Datos 3: he notamos que incluso las fuentes aleatorias de dafont funcionarán si están instaladas en el sistema (incluso con este código exacto, donde estoy cargado una copia del ttf [ahora instalado] de un archivo).
¿Sería posible para usted incluir un [sscce] (http://www.sscce.org)? Mientras tanto, si aún no lo has hecho, lee el tutorial [Cómo usar HTML en componentes Swing] (http://download.oracle.com/javase/tutorial/uiswing/components/html.html). – mre
Es muy probable que 'Font.createFont' tenga problemas.'' SetFont() 'de' Jlabel' se garantiza para establecer la fuente - como @mre sugiere, el ejemplo ayudaría a responder mejor esto. –
Sé que Font.createFont funciona porque si configuroTexto ("ejemplo") en JLabel aparece la fuente cargada, pero si configuroTexto (" ejemplo") se usa la fuente Swing JLabel predeterminada. ¿Esto cuenta como una sscce? –