texto - redimensionar jlabel java
Cómo cambiar el tamaño de la fuente de un JLabel para tomar el tamaño máximo (5)
Tengo una JLabel
en un contenedor. El tamaño predeterminado de la fuente es muy pequeño. Me gustaría que el texto de JLabel
tome el tamaño máximo.
¿Cómo puedo hacer eso?
Código fuente de la etiqueta: cómo cambiar el color y la fuente (en Netbeans)
jLabel1.setFont(new Font("Serif", Font.BOLD, 12));
jLabel1.setForeground(Color.GREEN);
No es el código más bonito, pero el siguiente seleccionará un tamaño de letra apropiado para una label
llamada JLabel
label
modo que el texto dentro se ajuste al interior tanto como sea posible sin desbordar la etiqueta:
Font labelFont = label.getFont();
String labelText = label.getText();
int stringWidth = label.getFontMetrics(labelFont).stringWidth(labelText);
int componentWidth = label.getWidth();
// Find out how much the font can grow in width.
double widthRatio = (double)componentWidth / (double)stringWidth;
int newFontSize = (int)(labelFont.getSize() * widthRatio);
int componentHeight = label.getHeight();
// Pick a new font size so it will not be larger than the height of label.
int fontSizeToUse = Math.min(newFontSize, componentHeight);
// Set the label''s font size to the newly determined size.
label.setFont(new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse));
Básicamente, el código analiza cuánto espacio ocupa el texto de JLabel
utilizando el objeto FontMetrics
y luego utiliza esa información para determinar el tamaño de letra más grande que se puede usar sin desbordar el texto de JLabel
.
El código anterior puede insertarse quizás en el método de paint
del JFrame
que contiene JLabel
, o en algún método que se invoque cuando se necesite cambiar el tamaño de la fuente.
La siguiente es una captura de pantalla del código anterior en acción:
Solo quería señalar que la respuesta aceptada tiene un par de limitaciones (que descubrí cuando traté de usarla)
- Tal como está escrito, en realidad sigue recalculando el tamaño de fuente en función de una proporción del tamaño de fuente anterior ... por lo tanto, después de solo un par de llamadas, el tamaño de la fuente es demasiado grande. (Por ejemplo, comience con 12 puntos como su fuente DISEÑADA, amplíe la etiqueta en solo 1 píxel, y el código publicado calculará el tamaño de la fuente como 12 * (digamos) 1.2 (relación de espacio de campo a texto) = 14.4 o fuente de 14 puntos. 1 píxel más y llama y estás en 16 puntos!).
Por lo tanto, no es adecuado (sin adaptación) para su uso en una configuración de llamada repetida (por ejemplo, un ComponentResizedListener
, o un LayoutManager
personalizado / modificado).
El código enumerado asume efectivamente un tamaño inicial de 10 pt, pero se refiere al tamaño de fuente actual y, por lo tanto, es adecuado para llamar una vez (para establecer el tamaño de la fuente cuando se crea la etiqueta). Funcionaría mejor en un entorno de llamadas múltiples si lo hiciera int newFontSize = (int) (widthRatio * 10);
en lugar de int newFontSize = (int)(labelFont.getSize() * widthRatio);
Debido a que usa una
new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse))
para generar la nueva fuente, no hay soporte para negrita, cursiva o color, etc. de la fuente original en la fuente actualizada. Sería más flexible si hiciera uso delabelFont.deriveFont
enlabelFont.deriveFont
lugar.La solución no proporciona soporte para HTML label Text. (Sé que probablemente nunca fue el resultado esperado del código de respuesta ofrecido, pero como tenía un
JLabel
texto HTML en miJPanel
descubrí formalmente la limitación.FontMetrics.stringWidth()
calcula la longitud del texto como incluido el ancho de las etiquetas html, es decir, simplemente como más texto)
Recomiendo mirar la respuesta a esta pregunta SO, donde la respuesta de trashgod apunta a una cantidad de respuestas diferentes (incluida esta) a una pregunta casi idéntica. En esa página, proporcionaré una respuesta adicional que acelera una de las otras respuestas por un factor de 30-100.
JLabel textLabel = new JLabel("<html><span style=''font-size:20px''>"+Text+"</span></html>");
label = new JLabel("A label");
label.setFont(new Font("Serif", Font.PLAIN, 14));
tomado de Cómo usar HTML en componentes Swing